Я новичок в MVVM и работал над парой руководств, чтобы освоить некоторые основы (привязки, RelayCommand и т. д.).
Приложение с одним окном Пока работает довольно хорошо, но теперь мне нужно добавить логин и одно или два других «представления». Я не ожидал, что это будет так больно....
Поработав над руководством на (Github), я смог выяснить, разместим ли я кнопку/команду из MainWindow.xaml, например, в /view/Home.xaml, команда все еще срабатывает, CurrentView также обновляется, но MainWindow не обновляется/не отображается? Итак.... Я очень запутался в том, что происходит, надеюсь, у кого-нибудь есть логическое объяснение.
После изучения еще пары примеров переполнения стека я прочитал о MVVM свет и обмен сообщениями, это способ заставить все работать? Если да, может ли кто-нибудь показать простой пример. не уверен, что существует простой пример.
Большое спасибо,
Все полезно
Алекс
PS: Я обновил свой репозиторий навигационных тестов github.com, который точно показывает проблему.
Надеюсь, что есть простое решение этой проблемы: D
ОБНОВЛЕНИЕ:
Я обновил свой код и пришел к выводу, что мне нужно использовать либо обмен сообщениями MVVM-light, либо агрегатор событий Prism.
Я решил попробовать агрегатор событий Prism, «попробовал» реализовать интерфейс и добавил агрегатор внутри моего конструктора в обеих моделях представления, но теперь все мое решение больше не работает.
Что я здесь делаю не так?
NavigationViewModel.cs
public class NavigationViewModel : ViewModelBase
{
private IEventAggregator _eventAggregator;
public NavigationViewModel(IEventAggregator eventAggregator)
{
LoginCommand = new RelayCommand(Login);
PwResetCommand = new RelayCommand(PwReset);
LogoutCommand = new RelayCommand(Logout);
// Startup Page
CurrentView = new LoginViewModel();
//Prism Event Aggregator
_eventAggregator = eventAggregator;
eventAggregator
.GetEvent()
.Publish(true);
}
public class MyEvent : PubSubEvent
{
}
WorkOrderViewModel.cs
public class WorkOrderViewModel : ViewModelBase
{
private IEventAggregator _eventAggregator;
public WorkOrderViewModel(IEventAggregator eventAggregator)
{
// Prism Event Aggregator
_eventAggregator = eventAggregator;
eventAggregator
.GetEvent()
.Subscribe(OnIsSavedEvent);
}
public void OnIsSavedEvent(bool isSaved)
{
bool IsModified = !isSaved;
}
}
NavigationView.xaml.cs:
public partial class NavigationView : UserControl
{
public NavigationView()
{
InitializeComponent(); //
Подробнее здесь: https://stackoverflow.com/questions/781 ... de-of-view
Мобильная версия