У меня есть MainView
и связанный MainViewViewModel
, которые связаны ViewModelLocator
.
В MainViewViewModel
есть команда, которая должна вызвать новый Window
, чтобы открыть, который имеет его собственные View и ViewModel (NewView
и NewViewViewModel
).
Во многих примерах, которые я видел, предлагается использовать Mvvmlight Messenger
, чтобы сделать что-то вроде этого:
public class MainViewViewModel
{
private void OpenNewWindow()
{
Messenger.Default.Send(new NotificationMessage("NewView"));
}
}
А затем зарегистрируйте NewViewViewModel
и обработайте сообщение следующим образом:
public class NewViewViewModel
{
public NewViewViewModel()
{
Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived);
}
private void NotificationMessageReceived(NotificationMessage obj)
{
if (obj.Notification == "NewView")
{
NewView view = new NewView();
view.Show();
}
}
}
Однако это не работает, потому что NewViewViewModel еще не создан (поэтому не зарегистрирован в Messenger
). Кроме того, это не подходит для MVVM, потому что NewViewViewModel
отвечает за создание NewView
.
Как правильно создать простую команду, которая создает и открывает новую пару View и ViewModel, которые связаны между собой через ViewModelLocator
и настройку DataContext="{Binding NewView, Source={StaticResource Locator}}"
в NewView.xml
?