MVVM:模型状态更改时通知视图

Gio*_*der 2 wpf mvvm mvvm-light

这是关于MVVM模式最佳实践的特定问题.我正在使用MvvmLight库.它是这样的:我的模型,说"飞行",实现了一些业务逻辑,可以通过方法启动,暂停和停止飞行.无论是停止还是暂停飞行,每种方法都会使其功能发生.一个重要的变量是状态枚举,表示航班状态 - 播放,停止或暂停.如上所述,状态变量(和属性)在模型中定义.另一方面,航班类由一个ViewModel类包装,该类包含一个包裹飞行模型中状态变量的Status属性,以及连接到飞行模型播放停止暂停方法的RelayCommands.

这里问题开始了:当我通过视图执行其中一个命令时,它会执行模型中的方法,以便状态变量本身直接更改,但它只会在模型中更改.ViewModel中的status属性不会知道包装变量是否已被更改,因为它已被直接更改...这意味着如果某个视图元素绑定到status属性,它将不会在命令执行时更改.

我知道有几种方法可以解决这个问题,但我要求一个公平的解决方案,不会破坏MVVM模式(比如在模型中的飞行类中使用INotifyPropertyChanged)

Jon*_*Jon 5

这类问题没有灵丹妙药解决方案.您的ViewModel和Model需要以允许信息传播到View的方式进行设计; 如果这是不可能的,那么设计是有缺陷的,需要改变.

以下是您应该研究的几件事:

  • 如果将Model的状态修改方法记录为同步执行,则在ViewModel上创建方法,将方法转发给Model,然后立即查询其状态.使用这些方法来实现RelayCommands.
  • 如果Model的方法不是同步的,那么Model的客户端应该有一些机制可以在方法完成时通知它们.这可以通过延续回调,事件或甚至可能来完成INotifyPropertyChanged.