在我的WPF应用程序中,我有几个模型和视图模型。考虑一个例子:
我SurfaceCondition
的{{1}}属性发生了变化。我希望这(异步)触发我的RoadViewmodel
的{{1}}属性的更改。
我可以想到几种解决方案,但我觉得这个特殊问题有一个公认的解决方案。使用消息?将RoadView模型中的引用放到Wheel
并通过属性触发更新?合并视图模型? WPF大师那里,请赐教!
答案 0 :(得分:0)
绝对不是你提出的最后两个解决方案,因为它们违反了Seperation Of Concerns(RoadViewModel了解CarViewModel)/ DRY原则(RoadViewModel必须更新CarViewModel或合并两个类)。
另一方面,消息在这里似乎是一个很好的,解耦的解决方案。有几种可用的实现,例如Prism具有en EventAggregator
类,MVVM Toolkit具有MessageBus
等。或者搜索诸如“MVVM事件总线”之类的术语。无论你选择什么,都知道不直接使用这些类而是通过接口总是好的。例如,使用Prism,您可以将视图模型编程为仅使用IEventAggregator
接口。在实际应用程序中,您传递实际EventAggregator的实例,而在单元测试期间,您传递模拟。