Как получить значения из диалогового окна WPF с MVVM - PullRequest
0 голосов
/ 18 мая 2011

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

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

   addVehicle.ShowDialog();

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

1 Ответ

7 голосов
/ 18 мая 2011

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

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

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

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

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

...