Лучший подход для создания нового окна в 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. Как вы думаете, один из перечисленных является хорошим или плохим? (Почему?)

Любые другие мысли приветствуются.

Благодарю.

Ответы на вопрос(6)

Ваш ответ на вопрос