Viewmodel的设计模式更改触发另一个视图模型更改?

时间:2012-10-29 08:32:29

标签: wpf mvvm

在我的WPF应用程序中,我有几个模型和视图模型。考虑一个例子:

SurfaceCondition的{​​{1}}属性发生了变化。我希望这(异步)触发我的RoadViewmodel的{​​{1}}属性的更改。

我可以想到几种解决方案,但我觉得这个特殊问题有一个公认的解决方案。使用消息?将RoadView模型中的引用放到Wheel并通过属性触发更新?合并视图模型? WPF大师那里,请赐教!

1 个答案:

答案 0 :(得分:0)

绝对不是你提出的最后两个解决方案,因为它们违反了Seperation Of Concerns(RoadViewModel了解CarViewModel)/ DRY原则(RoadViewModel必须更新CarViewModel或合并两个类)。

另一方面,

消息在这里似乎是一个很好的,解耦的解决方案。有几种可用的实现,例如Prism具有en EventAggregator类,MVVM Toolkit具有MessageBus等。或者搜索诸如“MVVM事件总线”之类的术语。无论你选择什么,都知道不直接使用这些类而是通过接口总是好的。例如,使用Prism,您可以将视图模型编程为仅使用IEventAggregator接口。在实际应用程序中,您传递实际EventAggregator的实例,而在单元测试期间,您传递模拟。