В сообщении соседа: Как закрыть ViewModel форму? Я опубликовал свое видение, как закрыть окна с использованием MVVM. И теперь у меня есть вопрос: как их открыть.
У меня есть главное окно (основной вид). Если пользователь нажимает кнопку "Показать", тогда должно отображаться окно "Демо" (модальное диалоговое окно). Каков предпочтительный способ создания и открытия окон с использованием шаблона MVVM? Я вижу два общих подхода:
Первый (возможно, самый простой). Обработчик событий "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 команды. Comman в свою очередь:
- поднимет "ShowDialogEvent";
- будет управлять состоянием кнопки.
Этот подход будет более подходящим для MVVM, но потребует дополнительного кодирования: класс ViewModel не может "показать диалог", поэтому MainWindowViewModel будет только поднимать "ShowDialogEvent", MainWindowView, нам нужно будет добавить обработчик событий в свой метод MainWindow_Loaded, что-то вроде этого:
((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog;
(ShowDialog - аналогично методу ModifyButton_Click.)
Итак, мои вопросы: 1. Вы видите какой-либо другой подход? 2. Считаете ли вы, что один из перечисленных хорош или плох? (Почему?)
Любые другие мысли приветствуются.
Спасибо.