I'm trying to create a recursive method to deselect all items in a WPF TreeView. The thing that complicates things is that each TreeViewItem is not a mini-TreeView. This causes you to have to do a lot of casting back and forth. So, here's what I have tried:
TreeViewDeselectAll(myTreeView.Items);
// Must send in ItemCollection to allow the recursive call
private void TreeViewDeselectAll(ItemCollection myTreeViewItems)
{
// The only way to get to the IsSelected property is to turn it back into a TreeViewItem
foreach (TreeViewItem currentItem in myTreeViewItems)
{
currentItem.IsSelected = false;
if (currentItem.HasItems)
{
// Recursify!
TreeViewDeselectAll(currentItem.Items);
}
}
}
Has anyone successfully deselected all items in a TreeView? Have you even been able to traverse a TreeView in a recursive manner?
The Winforms TreeView has a Nodes collection, which is really a mini-TreeView. This allows recursion just fine. But the WPF TreeView does not have Nodes.
Working in .Net 4.0.
Pravesh Singh
23-Dec-2013Each TreeViewItem is a Mini-TreeView. You got the wrong impression or you read something wrong about TreeViewItems.
What you doing wrong is passing the Items collection which doesnt contain children of type TreeViewItem but instead those are the data items.
Pass the children collection and you should do fine.
Like this:
XAML would look like this for example:
I changed your TreeViewDeselectAll method a little bit. Based on switch you can select or unselect all.