Как получить значения из диалогового окна WPF с помощью MVVM

#wpf #mvvm #modal-dialog

#wpf #mvvm #модальный диалог

Вопрос:

Каков наилучший способ получить значение из диалогового окна WPF, созданного с помощью шаблона MVVM. Мой текущий код включает в себя дополнительный шаг получения ViewModel и получения из него соответствующей переменной. Я хотел бы избежать этого шага, поскольку он кажется каким-то посторонним.

 private void OpenDataSeriesWindow()
{
   var addVehicle = new AddResultsSeries();

   addVehicle.ShowDialog();

   AddResultsSeriesViewModel tempViewModel = (AddResultsSeriesViewModel)addVehicle.DataContext;
   PlotVariables.Add(tempViewModel.NewSelectedVariable);
}
  

Ответ №1:

Обычно я делаю это таким образом:

  1. ViewModel, который хочет отобразить диалоговое окно, создает CustomDialogViewModel для конкретного диалогового окна. Он также может настроить ViewModel с начальными параметрами.

  2. Представление предоставляет интерфейс для отображения диалогового окна. Например, если бы у меня была CustomViewModel, в CustomWindow был бы реализован ICustomView, который вводится в конструктор CustomViewModel. ICustomView предоставил бы метод ShowCustomDialog(CustomDialogViewModel dialogViewModel) .

  3. ViewModel вызывает метод ShowDialog в интерфейсе просмотра. Когда вызов возвращается, он может использовать свойства DialogViewModel, чтобы увидеть результат.

Это позволяет отделить ViewModel от конкретной реализации View и позволяет вам вводить макет IView при модульном тестировании. Это позволяет вам писать тесты, которые определяют, что диалоговое окно было открыто с ожидаемыми параметрами, и выдают соответствующие результаты.