#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:
Обычно я делаю это таким образом:
-
ViewModel, который хочет отобразить диалоговое окно, создает CustomDialogViewModel для конкретного диалогового окна. Он также может настроить ViewModel с начальными параметрами.
-
Представление предоставляет интерфейс для отображения диалогового окна. Например, если бы у меня была CustomViewModel, в CustomWindow был бы реализован ICustomView, который вводится в конструктор CustomViewModel. ICustomView предоставил бы метод
ShowCustomDialog(CustomDialogViewModel dialogViewModel)
. -
ViewModel вызывает метод ShowDialog в интерфейсе просмотра. Когда вызов возвращается, он может использовать свойства DialogViewModel, чтобы увидеть результат.
Это позволяет отделить ViewModel от конкретной реализации View и позволяет вам вводить макет IView при модульном тестировании. Это позволяет вам писать тесты, которые определяют, что диалоговое окно было открыто с ожидаемыми параметрами, и выдают соответствующие результаты.