2010-04-22 57 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 ...