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