Каков хороший шаблон для обновления модели представления как из взаимодействия с пользователем, так и из событий службы? - PullRequest
1 голос
/ 24 августа 2011

Рассмотрим эти два сценария:

  • пользователь нажимает кнопку в представлении (например, Выполнить заказ ), и мы хотим, чтобы представление обновлялось немедленно (отключить кнопку, добавить индикатор выполнения и т. Д.)
  • сервисный уровень вызывает бизнес-событие, которое в конечном итоге должно быть отражено в представлении (например, товара нет в наличии).

В обоих случаях законно требуется какой-то механизм X для обновления модели представления. С MVVM представление может сделать это, установив свойства модели представления в обработчике событий, через привязку команды или через какой-либо другой механизм.

Сервисный уровень может сделать это, используя некоторый механизм, Y . Например, создание событий в модели бизнес / домен, создание команд для управления моделью представления, вызов методов для модели представления и т. Д.

Фактически, X и Y могут быть одним и тем же механизмом (или шаблоном).

Что хорошего для этого, что соответствует духу MVVM, но СУХОЙ?

1 Ответ

1 голос
/ 29 августа 2011

Я думаю, вам нужно выбрать MVVM-фреймворк и следовать шаблону, который он поддерживает.

В целом:

  • Ваша кнопка будет подключена к методу FulfillOrder в вашей ViewModel через ICommand или в зависимости от того, что ваша MVVM-структура поддерживает
  • Булево свойство CanFulfillOrder будет подключено для отключения вашей кнопки через INotifyPropertyChanged, это может быть вызвано методом FulfillOrder или событием, которое вы упомянули. Это также может быть связано с видимостью на индикаторе выполнения.
  • В другом свойстве может быть указан процент на индикаторе выполнения и, соответственно, обновлено значение

Хорошая универсальная среда MVVM: MVVM Light .

Если вы ищете больше мощности и можете справиться с большей сложностью, попробуйте Caliburn .

Или, если вы хотите использовать динамические и попробовать что-то передовое, попробуйте мой фреймворк: NoMvvm .

...