2009-11-17 90 views
0

我正在學習WPF和MVVM,並試圖強調良好的設計。我有很多有關WinForms和C#的經驗。這是概念性的,所以我不認爲我需要發佈代碼。WPF MVVM控件共享信息

我有一個管理「配置文件」的xaml窗口。左半部分是綁定到ViewModel的自定義Control樹視圖,該ViewModel讀取數據庫並創建一系列配置文件。各個配置文件的ViewModel包含一個數據庫ID等等。右半部分是另一個自定義控件,帶有一個ListView和它自己的ViewModel,用於讀取個人配置文件信息的數據庫。

這兩個部分都可以獨立工作,但現在我想將列表視圖與樹視圖選擇聯繫起來,以便列表視圖中的信息反映樹視圖選擇。做這個的最好方式是什麼?

treeview viewmodel提供了一個配置文件ID,可用於在列表視圖中查找配置文件信息。再次,目標是將這兩者聯繫在一起。我覺得我有幾個選擇:

-treeview的viewmodel可以在listview viewmodel中調用一個靜態方法來更新配置文件。

- 整個頁面可能包含具有兩個組件的成員視圖模型的視圖模型。

- 我可以以某種方式將treeviewss viewmodel的已知選定配置文件「路由」到xaml文件中的listview控件。

所有這些選項都很髒。再次我在這裏學習,並且想要強調良好的設計,因爲稍後這些小細節決定更大的決定。

和想法?

謝謝!

回答

1

您是否在使用棱鏡? CAL WPF?如果是這樣,你可能要考慮使用複合事件。這些事件可以在ViewModels上運行,也有CompositeCommands。

您可以設置像這樣的複合事件...

public class ProfileSelectedEvent : CompositePresentationEvent<Profile> 
{ 
} 

然後,您可以使用EventAggregator訂閱和發佈的複合事件。如果您使用棱鏡/ CAL爲WPF你必須團結插上,所以你可以把IEventAggregator在您的視圖模型

TreeViewViewModel(IEventAggregator eventAggregator) 

構造然後你就可以發佈和訂閱經過EventAggregator事件...

EventAggregator.GetEvent<ProfileSelectedEvent>().Publish(profile); 

訂閱是非常相似的......我相信你明白了!

希望這有助於

安迪

+0

我不使用棱鏡/ CAL,其實這是我第一次聽說過它。正在使用它成爲一種常見的趨勢,我應該養成使用習慣...換句話說,我是否正在嘗試學習基本的WPF安裝結構和MVVM結構,進入一個受到傷害的世界? – bufferz 2009-11-17 17:27:33

+0

它只是提供了一個非常好的框架來建立 - 繼承人的MSDN文章... http://msdn.microsoft.com/en-us/magazine/cc785479。aspx 但是你真正想要做的就是下載並加載微軟創建的StockTrader應用程序作爲示例... http://www.microsoft.com/downloads/details.aspx?FamilyId=6DD3D0C1 -D5B4-453B-B827-98E162E1BD8D&displaylang = en 這將向您展示如何將事物放在一起,以及我如何開始使用WPD和MVVM。希望這有助於... – 2009-11-17 17:37:37

+0

謝謝,安迪。我花了一點時間瞭解棱鏡和它的內容。挖掘更深入,我使用和EventAggregator會完成我想要做的事情。這使我不僅僅是一行代碼的普遍方向。感謝您的輸入! – bufferz 2009-11-19 14:53:11