title: In WPF, how do you programmatically deselect all Items in a Treeview?
body: <p>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:</p>
  
  <pre><code>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);
          }
      }
  }
  </code></pre>
  
  <p>Has anyone successfully deselected all items in a TreeView?  Have you even been able to traverse a TreeView in a recursive manner?</p>
  
  <p>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.</p>
  
  <p>Working in .Net 4.0.</p>