I have a three level treeview. How do I select any item in third level from code? I tried a method mentioned in many blogs and on stackoverflow but it seems to work only for first level (dbObject is null for items on below first level).
Here is the code I'm using to select TreeViewItem. Do I miss something?
public static void SetSelectedItem(this TreeView control, object item)
{
try
{
var dObject = control.ItemContainerGenerator.ContainerFromItem(item);
//uncomment the following line if UI updates are unnecessary
((TreeViewItem)dObject).IsSelected = true;
MethodInfo selectMethod = typeof(TreeViewItem).GetMethod("Select",
BindingFlags.NonPublic | BindingFlags.Instance);
selectMethod.Invoke(dObject, new object[] { true });
}
catch { }
}
Another option would be to use binding. If you have an object that you are using binding with to get the text of each TreeViewItem
(for example), you can create a style that also binds the IsSelected
property:
<TreeView>
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected"
Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
</TreeView>
This assumes that the bound object has an IsSelected
property of type bool
. You can then select a TreeViewItem
by setting IsSelected
to true
for its corresponding object.
The same approach can be used with the IsExpanded
property to control when a TreeViewItem
is expanded or collapsed.