Я просматриваю статьи MVVM, главным образом и .
Мой конкретный вопрос: Как мне изменить изменения модели с модели на ViewModel?
В статье Джоша я не вижу, что он это делает. ViewModel всегда запрашивает модель для свойств. В примере с Rachel у нее действительно есть модельный инструмент INotifyPropertyChanged
и вызывает события из модели, но они предназначены для потребления самим видом (более подробную информацию о том, почему она это делает) (см. Ее статью/код).
Нигде не вижу примеров, когда модель предупреждает ViewModel об изменениях свойств модели. Это меня беспокоило, что, возможно, это не сделано по какой-то причине. Есть ли шаблон для оповещения ViewModel об изменениях в Модели? Казалось бы, это необходимо, поскольку (1), по-видимому, для каждой модели имеется более 1 ViewModel и (2), даже если есть только один ViewModel, некоторые действия над моделью могут привести к изменению других свойств.
Я подозреваю, что могут быть ответы/комментарии формы "Зачем вы хотите это сделать?" комментарии, поэтому здесь описание моей программы. Я новичок в MVVM, поэтому, возможно, весь дизайн неисправен. Я кратко опишу его.
Я программирую что-то более интересное (по крайней мере, для меня!), чем классы "Клиент" или "Продукт". Я программирую BlackJack.
У меня есть представление, которое не имеет никакого кода и просто полагается на привязку к свойствам и командам в ViewModel (см. статью Джоша Смита).
К лучшему или худшему я придерживался мнения, что модель должна содержать не только классы, такие как PlayingCard
, Deck
, но также класс BlackJackGame
, который сохраняет состояние всей игры и знает, когда игрок пошел на спад, дилер должен рисовать карты, и то, что текущий счет игрока и дилера (меньше 21, 21, бюст и т.д.).
Из BlackJackGame
Я выставляю такие методы, как "DrawCard", и мне пришло в голову, что при рисовании карты такие свойства, как CardScore
и IsBust
, должны обновляться, и эти новые значения передаются в ViewModel. Возможно, это ошибочное мышление?
Можно согласиться с тем, что ViewModel называл метод DrawCard()
, поэтому он должен знать, чтобы попросить обновленную оценку и выяснить, нет ли он в бюсте или нет. Мнения?
В моей модели ViewModel у меня есть логика, чтобы захватить фактическое изображение игровой карты (основанной на масти, ранге) и сделать ее доступной для представления. Модель не должна заботиться об этом (возможно, другой ViewModel просто использовал бы цифры вместо того, чтобы играть в карточные изображения). Конечно, возможно, некоторые скажут мне, что у модели не должно быть даже понятия о игре BlackJack, и что нужно обрабатывать в ViewModel?