我的具体问题是:如何将模型更改从模型传递到ViewModel?
在Josh的文章中,我看不到他这样做。ViewModel总是向模型询问属性。在Rachel的示例中,她确实具有模型实现INotifyPropertyChanged
,并从模型中引发事件,但是这些事件仅供视图本身使用(有关执行此操作的详细信息,请参阅她的文章/代码)。
我在哪里都看不到模型向ViewModel发出模型属性更改警报的示例。这让我担心也许由于某些原因未完成。 有没有一种模式可以提醒ViewModel模型中的更改? 似乎有必要,因为(1)可以想象每个模型有多个ViewModel,并且(2)即使只有一个ViewModel,对模型的某些操作也可能导致其他属性被更改。
我怀疑可能会有“为什么要这样做?”形式的答案/评论。注释,所以这是我的程序的描述。我是MVVM的新手,所以我的整体设计可能有问题。我将简要描述一下。
我正在编写比“客户”或“产品”类更有趣的东西(至少对我来说!)。我正在编程BlackJack。
我有一个View,它没有任何代码,仅依赖于绑定到ViewModel中的属性和命令(请参阅Josh Smith的文章)。
是好还是坏,我把该模型应该不仅包含类,如态度PlayingCard
,Deck
但也BlackJackGame
认为保持整场比赛的状态类的,知道什么时候该玩家已经破产,经销商有画卡,玩家和发牌人当前的得分是多少(小于21、21,半身等)。
从BlackJackGame
我开始,我公开了“ DrawCard”之类的方法,然后想到在绘制卡片时CardScore
,IsBust
应该更新诸如和的属性,并将这些新值传递给ViewModel。也许那是错误的想法?
可以采取ViewModel调用该DrawCard()
方法的态度,因此他应该知道要求更新分数,并确定自己是否破产。意见?
在我的ViewModel中,我有逻辑来获取纸牌的实际图像(基于西服,等级)并将其用于视图。该模型不必为此担心(也许其他ViewModel只会使用数字而不是纸牌图像)。当然,也许有人会告诉我,该模型甚至不应该具有BlackJack游戏的概念,而应该在ViewModel中进行处理?
OnBust
,VM可以订阅该事件。我想您也可以使用IEA方法。