2012-10-29 56 views
0

在我的WPF應用程序中,我有幾個模型和視圖模型。考慮一個例子:Viewmodel更改的設計模式觸發另一個視圖模型更改?

SurfaceCondition屬性我的RoadViewmodel的變化。我希望這(異步)觸發我的CarViewmodelWheel屬性的更改。

我可以想到幾種解決方案,但我覺得這個特殊的問題有一個公認的解決方案。使用消息?在RoadViewmodel中引用CarViewmodel並通過屬性觸發更新?合併視圖模型? WPF大師在那裏,請賜教!

+0

絕對不是您提出的兩個最後解決方案,因爲它們違反了關注/ DRY原則的分離。消息似乎是一個很好的解耦解決方案。 – stijn

+1

指向一個消息模式實現的好源,我會接受答案。謝謝。 – l33t

回答

0

絕對不是您提出的兩個最後解決方案,因爲它們違反了分辨率問題(瞭解CarViewModel的RoadViewModel)/ DRY原理(需要更新CarViewModel或合併兩個類的RoadViewModel)。

另一方面,消息看起來像是一個很好的解耦解決方案。有幾個實現可用,例如Prism有en EventAggregator類,MVVM ToolkitMessageBus等。或搜索像'MVVM事件總線'這樣的術語。現在無論你選擇什麼,都知道不直接使用這些類,而是通過一個接口總是好的。例如,對於Prism,您只需編程視圖模型即可使用接口IEventAggregator。在實際的應用程序中,您將實際的EventAggregator實例傳遞給它們,而在單元測試期間,您傳遞一個模擬。

+0

Prism的EventAggregator用於發佈和訂閱事件工作/消息,或者另一種選擇是實現一個負責創建視圖/視圖模型並且有時處理它們之間的事件或通信的「控制器」。 – Alan