考虑以下两个场景:
- 用户按下视图中的按钮(例如 complete Order),我们希望视图立即更新(禁用按钮,添加进度条等)
- 服务层引发一个业务事件,该事件最终必须反映在视图上(例如,产品已经脱销)。
这两种情况都需要一些机制X来更新视图模型。使用MVVM,视图可以通过在事件处理程序中设置视图模型的属性、通过命令绑定或通过一些其他机制来实现这一点。
服务层可以使用某种机制Y来完成此操作。例如,在业务/域模型中引发事件、创建操作视图模型的命令、调用视图模型上的方法等。
事实上,X和Y可能是相同的机制(或模式)。
什么是一个好的,这样做,保持MVVM的精神,但是DRY?
我认为你需要选择一个MVVM框架,并遵循它支持的模式。
一般:
- 你的按钮将被钩到ViewModel上的一个FulfillOrder方法,通过一个iccommand或任何你的mvc框架支持
- 一个"CanFulfillOrder"布尔属性将通过INotifyPropertyChanged连接到禁用按钮,这可以由FulfillOrder方法或您提到的事件触发。它也可以绑定到进度条的可见性。
- 另一个属性可以在进度条上提供百分比并适当更新
一个好的通用MVVM框架是MVVM Light。
如果您正在寻找更强大的功能,并且可以处理更复杂的问题,请尝试Caliburn。
或者如果你想使用动态并尝试一些前沿的东西,试试我的框架:NoMvvm.