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