我正在使用WPF應用程序並使用Model-View-ViewModel模式。WPF中不使用棱鏡的鬆散耦合事件
應用程序由目前兩個模塊:
- 左側面板瀏覽樹並選擇節點
- 主面板顯示所選樹節點的內容。
我想保持這兩個模塊分離,但是當我在左面板中選擇一個節點時,我需要觸發主面板可以訂閱的事件。我不想結合Left和Main面板,所以我不想共享ViewModel類的實例。
最好我喜歡使用Prism(WPF複合應用程序指導),但我目前正在擴展現有的應用程序,並且不能引入更多的依賴關係。該項目也在.NET 3.0(不是3.5)上,所以我必須將Prism轉換回.NET 3.0,因爲它是爲.NET 3.5編寫的。
在棱鏡我會解決這個使用鬆散耦合事件基礎設施。它可以讓你在任何層次的任何課堂中觸發一個事件,並聽取任何層次上的任何課堂中的任何事件。基本上,事件的發佈者和訂閱者是分離的。
我使用Commands來實現View和ViewModel之間的鬆散耦合,但我不確定如何進行適當的跨視圖通信。
任何提示或建議,非常感謝。
我專門找了真正光權衡的pub/sub事件模型的.NET 2.0/3.0(無LINQ的東西),或者一些別的東西來實現跨瀏覽(模塊)的通信,而這兩個連接模塊。
更新:我最終以類似Glen的建議解決了這個問題。我有一個單獨的EventService(我稱之爲CommandProxy),並通過我的服務定位器中的構造函數(此刻我使用服務定位器而不是IoC容器)將其傳遞給每個ViewModel。 CommandProxy公開了一組MultiDelegateCommants,它是Prism中的DelegateCommand的擴展(Composite WPF Guidance)。它基本上允許與Visual Tree分離的命令,並支持多個訂閱者。