Лучший подход для создания нового окна в WPF с использованием MVVM
В соседнем посте:Как ViewModel должен закрыть форму? Я опубликовал свое видение, как закрыть окна с использованием MVVM. А теперь у меня вопрос: как их открыть.
У меня есть главное окно (основной вид). Если пользователь нажимает кнопку «Показать», то должно отображаться окно «Демо» (модальное диалоговое окно). Каков предпочтительный способ создания и открытия окон с использованием шаблона MVVM? Я вижу два общих подхода:
1-й (вероятно, самый простой). Обработчик события «ShowButton_Click» должен быть реализован в коде позади главного окна следующим образом:
private void ModifyButton_Click(object sender, RoutedEventArgs e)
{
ShowWindow wnd = new ShowWindow(anyKindOfData);
bool? res = wnd.ShowDialog();
if (res != null && res.Value)
{
// ... store changes if neecssary
}
}
Если мы «Показать» состояние кнопки должно быть изменено (включено / отключено), нам нужно будет добавить логику, которая будет управлять состоянием кнопки;Исходный код очень похож на исходные WinForms и MFC в "старом стиле" - я не уверен, хорошо это или плохо, пожалуйста, посоветуйте.Что-то еще, что я пропустил?Другой подход:
В MainWindowViewModel мы реализуем свойство «ShowCommand», которое будет возвращать интерфейс команды ICommand. Коммен по очереди:
поднимет "ShowDialogEvent";будет управлять состоянием кнопки.Этот подход будет более подходящим для MVVM, но потребует дополнительного кодирования: класс ViewModel не может «показывать диалог», поэтому MainWindowViewModel вызовет только «ShowDialogEvent», MainWind, owView, нам потребуется добавить обработчик события в его метод MainWindow_Loaded, что-то нравится:
((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog;
(ShowDialog - аналогично методу ModifyButton_Click.)
Итак, мои вопросы: 1. Видите ли вы какой-либо другой подход? 2. Как вы думаете, один из перечисленных является хорошим или плохим? (Почему?)
Любые другие мысли приветствуются.
Благодарю.