How to programmatically select an item in a WPF TreeView?
For those who are still looking for the right solution to this problem here is the one below. I found this one in the comments to the Code Project article “WPF TreeView Selection” http://www.codeproject.com/KB/WPF/TreeView_SelectionWPF.aspx by DaWanderer.It was posted by Kenrae on Nov 25 2008. This worked great for me. Thanks Kenrae!
Here is his post:
Instead of walking the tree, have your own data object have the IsSelected property (and I recommend the IsExpanded property too). Define a style for the TreeViewItems of the tree using the ItemContainerStyle property on the TreeView that binds those properties from the TreeViewItem to your data objects. Something like this:
<Style x:Key="LibraryTreeViewItemStyle" TargetType="{x:Type TreeViewItem}"> <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> <Setter Property="FontWeight" Value="Normal" /> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="FontWeight" Value="Bold" /> </Trigger> </Style.Triggers> </Style><TreeView ItemsSource="{Binding Path=YourCollection}" ItemContainerStyle="{StaticResource LibraryTreeViewItemStyle}" ItemTemplate={StaticResource YourHierarchicalDataTemplate}/>
It's a real pain for some strange reason, you have to use ContainerFromItem to get the container, then invoke the select method.
// selectedItemObject is not a TreeViewItem, but an item from the collection that // populated the TreeView.var tvi = treeView.ItemContainerGenerator.ContainerFromItem(selectedItemObject) as TreeViewItem;if (tvi != null){ tvi.IsSelected = true;}
There once was a blog entry on how to do it here, but the link is dead now.
You need to get the TreeViewItem
and then set IsSelected
to true
.