Я пытаюсь изучить WPF и проблему MVVM, но попал в ловушку. Этот вопрос аналогичен, но не совсем такой как этот (обработка-dialogs-in-wpf-with-mvvm)...
У меня есть форма "Вход", написанная с использованием шаблона MVVM.
В этой форме есть ViewModel, который содержит имя пользователя и пароль, которые привязаны к представлению в XAML, используя обычные привязки данных. Он также имеет команду "Вход", которая привязана к кнопке "Войти" в форме, агане, используя обычную привязку данных.
Когда запускается команда "Вход", она вызывает функцию в ViewModel, которая отключается и отправляет данные по сети для входа в систему. Когда эта функция завершается, есть 2 действия:
-
Вход был неверным - мы просто показываем MessageBox, и все в порядке
-
Вход был действителен, нам нужно закрыть форму "Вход" и вернуть значение true в качестве
DialogResult
...
Проблема в том, что ViewModel ничего не знает о фактическом представлении, поэтому как он может закрыть представление и сказать ему, чтобы он возвращал конкретный DialogResult? Я мог бы вставить код в CodeBehind и/или передать View в ViewModel, но похоже, что он полностью уничтожит всю точку MVVM...
Update
В конце концов я просто нарушил "чистоту" шаблона MVVM и опубликовал событие "Публиковать" Closed
и вывел метод Close
. Тогда ViewModel просто вызовет view.Close
. Вид известен только через интерфейс и подключался через контейнер IOC, поэтому никакая тестируемость или ремонтопригодность не теряются.
Кажется довольно глупым, что принятый ответ на -5 голосов! Хотя я хорошо знаю хорошие чувства, возникающие при решении проблемы, будучи "чистыми", конечно, я не единственный, кто думает, что 200 строк событий, команд и поведения просто избегают метода одной строки в имя "узоры" и "чистота" немного смешно....