В соответствии с шаблоном ViewModel предоставляет свойства (с уведомлением об изменениях) и команды (для уведомления виртуальной машины о действиях пользователя), к которым привязывается представление.
Единственное сообщение, которое передается от виртуальной машины к представлению, - это уведомления об изменении свойств (так что представление может обновляться с обновленными данными).
В форме шаблона MVP или PresentationModel (если я не ошибаюсь), представление реализует простой ванильный интерфейс (состоящий из методов, свойств и / или событий). С MVVM кажется, что методы на IView были объявлены вне закона (вместе с самим IView).
Один сценарий, о котором я мог подумать, - это установить фокус на определенный элемент управления в представлении. ( Когда пользователь делает ActionX, фокус должен быть немедленно установлен на FieldY ).
- В MVP я бы написал это как IView.ActivateField (NameConstant), которое вызывал бы докладчик или премьер-министр.
- В MVVM, это, кажется, крайний случай, который требует обходного пути / небольшого количества кода позади. ВМ реализует свойство ActiveField, которое устанавливает в NameConstant. Представление получает событие уведомления об изменении и в обработчике события с выделенным кодом активирует элемент управления Name.
Вышеуказанное - просто исключение из нормы? Или есть другие подобные сценарии, когда виртуальной машине нужно вызывать метод в представлении?