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