I have a TreeView
which uses a HierarchicalDataTemplate
to bind its data.
It looks like this:
I modified William's recursive search to a more compact version:
public TreeViewItem GetTreeViewItemFromObject(ItemContainerGenerator container, object targetObject) {
if (container.ContainerFromItem(targetObject) is TreeViewItem target) return target;
for (int i = 0; i < container.Items.Count; i++)
if ((container.ContainerFromIndex(i) as TreeViewItem)?.ItemContainerGenerator is ItemContainerGenerator childContainer)
if (GetTreeViewItemFromObject(childContainer, targetObject) is TreeViewItem childTarget) return childTarget;
return null;
}
One would call it by providing the TreeView instance's ItemContainerGenerator and the target data object:
TreeViewItem tvi = GetTreeViewItemFromObject(treeView.ItemContainerGenerator, targetDataObject);