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