wpf manually generate TreeViewItem container

北城余情 提交于 2019-12-20 03:19:50

问题


I am creating a TreeView at runtime. It has several nodes(TreeViewItem), each one having a name. Initially it is collapsed. A separate comboBox displays Names of all TreeViewItem. I have to highlight a TreeViewItem based on the Name selected. I am using a recursive function and gets the TreeViewItem container like this:

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

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

but it is

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

for all the collapsed items. How can I generate containers for them manually(Without expanding them)?


回答1:


Anytime you find yourself walking the visual tree you should think seriously about building a view model.

the view model can increase the treeviews functionality without worrying about the kinds of issues you are facing.

The view model for your application would have a couple of extra properties

IsSelected

IsExpanded

IsHighlighted

as well as your

Data

then you would bind (using an ItemContainerStyle) the IsSelected, IsHighlighted and IsExpanded to the TreeViewItem, then as you had a collection of these view models you could do your search on the view model and just set the property IsHighlighted. The view model would then respond and because of the binding to the style it would highlight the treeviewitem if you wanted. It could also do funky stuff like expand all the nodes above. The tree view would respond to this.

The view model when combined with a treeview gives much more flexibility and stops those visual tree crawling exercises (which are a hack, and feel dirty)

here is a good article about the ViewModel and the TreeView...



来源:https://stackoverflow.com/questions/2688865/wpf-manually-generate-treeviewitem-container

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!