3

我已經調整了TreeView控件示例項目here以用於實體框架對象。它的工作原理非常漂亮,但是和許多其他人試圖更新基於SelectedItem的ParentViewModel的集合或屬性一樣,我也無法彌合理解的空白。如何綁定到WPF TreeView的SelectedItem屬性?

我正在使用MVVM,並希望我的代碼無任何混亂。作爲初學者,我喜歡實施PropertyChanged通知的清潔程度,但由於它們沒有與TreeView綁定的固有「SelectedItem」屬性,所以我無法像通常使用ListBox那樣引發PropertyChanged事件。

我在我的ChildViewModel上也有一個SelectedItem屬性(實際上已經成功捕獲了isSelected = true的對象)(請參閱H.B.的回答this question)。我的ParentViewModel上還有一個類型爲ChildViewModel的SelectedItem,它綁定到我的視圖(參見@Martin Liversage的帖子here)。我無法讓他們同步。

請幫我理解如何將我的ChildViewModel的SelectedItem屬性與我的ParentViewModel進行通信。我沒有將我的TreeView綁定到CollectionView,所以我無法在視圖集合中獲得CurrentItem

我正在處理的我的viewmodel集合非常查詢,所以我現在還沒有包含任何代碼。請讓我知道需要澄清什麼。

回答

6

因此,至少你已經開始習慣於你的日常MVVM-WTF ......「爲什麼我必須在SO上發佈這樣的基本內容」。有一天,你會愛上MVVM,我保證;)

這就是說:如你所知,TreeView不支持同步SelectedItem屬性。它確實存在,但它是隻讀的。你想要做的是擴展TreeView的行爲,使其與ViewModel上的屬性同步它的選定項目。

此問題描述指向正確的方向:行爲。行爲(或者,確切地說,System.Windows.Interactivity.Behavior <> s)允許您擴展任何DependencyObject的功能。 (Good introduction

到您的TreeView通過行爲選擇的項目進行同步的一種方法,可以在這裏找到:

SO Thread

這應該已經爲你做。您只需複製並粘貼Steve GreatRex的代碼即可。請評論,如果您需要幫助的方法。玩得開心學習!

+0

謝謝:)對不起,花了這麼長時間。在這個問題和我遇到的一個額外的理解問題之間辨別。 – Rachael 2013-03-12 00:31:08

+0

沒問題,希望它有幫助! – Marc 2013-03-12 07:52:31