2010-04-22 51 views
1

我在運行時創建一個TreeView。它有幾個節點(TreeViewItem),每個節點都有一個名稱。最初它崩潰了。一個單獨的組合框顯示所有TreeViewItem的名稱。我必須突出顯示基於所選名稱的TreeViewItem。我使用的是遞歸函數,並得到這樣的樹型視圖容器:wpf手動生成TreeViewItem容器

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) 
       continue; 

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>(); 

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

所有倒塌的物品。我如何手動生成容器(不擴展它們)?

回答

2

每當你發現自己走在視覺樹上時,你應該認真考慮構建視圖模型。

視圖模型可以增加treeview功能,而不必擔心你面臨的問題種類。

您的應用程序的視圖模型將有一對夫婦額外的屬性

IsSelected 

IsExpanded 

IsHighlighted 

以及你

Data 

,那麼你會綁定(使用ItemContainerStyle)的IsSelected,IsHighlighted和IsExpanded到TreeViewItem,然後當你有這些視圖模型的集合,你可以在視圖模型上進行搜索,並設置屬性IsHighlighted。然後,視圖模型會響應,並且由於綁定到樣式,如果需要,它會突出顯示樹視圖。它也可以做一些時髦的東西,比如展開上面的所有節點。樹視圖將對此作出響應。

當一個TreeView結合視圖模型提供了更大的靈活性,並停止這些視覺樹爬行運動(這是一個黑客,覺得髒)

這裏是一個good article about the ViewModel and the TreeView ...