Как мне запускать оповещения из ViewModel? - PullRequest
5 голосов
/ 21 октября 2011

Я задал этот вопрос нескольким коллегам, которые, как мне кажется, имеют хороший смысл в дизайне.Интересно, что я получил разные ответы.Итак, какой вариант, по вашему мнению, лучше всего подходит для шаблона MVVM и почему?

Скажем, у меня есть требование показывать значок оповещения, когда $ больше $ 10k.

  • Вариант 1: ВМимеет свойство «Количество», триггер XAML и / или привязку устанавливает видимость элемента
  • Опция 2: ВМ имеет свойство «ShowAlert», XAML связывает видимость с помощью конвертера bool to visibility
  • Опция 3: ВМимеет свойство "AlertVisibility", XAML связывается напрямую
  • Вариант 4: Другое (пожалуйста, объясните)

Спасибо за отзыв!

Ответы [ 2 ]

4 голосов
/ 21 октября 2011

В вашем случае у вас есть определенное бизнес-правило Shown WHEN > 10k, оно должно быть инкапсулировано во ViewModel, а не в View, потому что View знает о том, КАК будут отображаться данные, а не WHEN и WHY.

Поэтому я бы предложилвыставляя свойства Amount и ShowAlert и избегая выставления свойства AlertVisibility, потому что оно рассеивает такие WPF. Видите конкретные вещи, такие как Visibility перечисление состояний (Hidden, Collapsed, ...)

Если вы предпочитаете выставлять AlertVisibility, вы можете столкнуться со следующей проблемой в будущем - просто представьте, что более новые версии WPF избавились от надоедливого перечисления Visibility , и в этом случае вам нужно изменить ViewModel, чтобы выставитьНовая инфраструктура / свойство видимости, позволяющая поддерживать нормальную работу View, но это неправильно с точки зрения MVVM, когда поведение View инкапсулировано во ViewModel.Так что Сохраняйте это простым и раскрывайте прямолинейное bool AlertVisible свойство.

РЕДАКТИРОВАТЬ: Относительно предложения именования в комментарии

Абсолютно согласен!Я бы предложил переименовать AmountVisible в IsAmountSpecified или что-то вроде этого.

0 голосов
/ 21 октября 2011

Я бы хотел, чтобы видимость значка предупреждения моего видения была ограничена. Сумма значения через преобразователь, который принимает параметр в размере 10000. Преобразователь вернул бы видимое или свернутое значение.

Вы также можете сделать так, чтобы виртуальная машина отправляла сообщение, когда оно превысило пороговое значение, и любое представление или другие модели представления, которые хотят его прослушать, могут реагировать на сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...