2011-08-20 66 views
0

我有一個3級TreeView,它使用多重綁定爲每個A類實例生成2個TreeViewItems作爲B類列表。每個列表包含C類的項。爲什麼TreeViewItems不是在Multibinding中生成的,除非可見?

我可以在列表(B類)摺疊時爲我的UI中的每個列表添加C類的項目。 我甚至可以爲每個List(Class B)添加Class C,同時整個TreeViewItem(Class A)被摺疊。

我的問題是我需要能夠訪問所有TreeViewItems,即使它們被摺疊。(爲ex來選擇它們)。

我想這樣做,但我遇到了以下問題:

1-所有不可見TreeViewItems(類B和C)尚未爲TreeViewItems創建(我怎樣才能讓他們呢?)

2 - 當U擴大B級TreeViewIiem首次ü能看到它的所有項目(C級)爲TreeViewItems。(顯然微不足道)

3-摺疊後展開任何B級(只有2)在特定 A類TreeV iewItem將導致能夠增加C類實例作爲TreeViewItems即使整個樹型視圖(A類)已展開。(只要你呆在這個A級樹型視圖)

4-如果妳變化選定的類A(即,如果你點擊另一個TreeViewItem,它具有與選擇的類A不同的祖先),先前選擇的類A的所有不可見的TreeViewItem都會丟失。你可以從第一步開始重新選擇A類。

那麼我怎麼能夠在任何給定的時刻選擇C類或B類的任何TreeViewItem?

謝謝

回答

0

1)根據你要多少項目在您的樹狀視圖顯示,你要創造一切TreeViewItems。你正在觀察的是所謂的虛擬化。如果你真的不想這樣做,我強烈建議你不要這樣做,你可以在你的TreeView上使用VirtualizingStackPanel.IsVirtualizing="False"。如果你不介意弄髒你的手,this也可能會有幫助。

不幸的是我不明白你的其他觀點。首先,告訴我們如何創建數據層次結構。我想你可以在使用動態數據和使用合適的綁定(用於合併等)時使所有的工作都能正常工作。 因爲那麼什麼樣的UI控件是可見的並不重要,只有數據應該是相關的。

併爲您的最後一個和實際的問題。如果使用ItemsSource和HierarchicalDataTemplate,則可以使用easyl遍歷數據以查找項目,例如,可以摺疊以使所有C類可見。

但是,一個問題是,選擇TreeView控件是有點問題。看到this文章的一種方法來解決它

+0

我試過VirtualizingStackPanel.IsVirtualizing =「假」沒有爲我工作,給了我同樣的行爲。當我閱讀和你說我不應該使用它。向TreeView資源添加的樣式完成了