OnExpanded event for any item in a treeview

Ian Kelling picture Ian Kelling · Sep 7, 2009 · Viewed 13.7k times · Source

I'd like to get an event for any expansion of a treeviewitem in my treeview.

The reason for this, a bit unrelated to the original question: I am creating a tree that relates closely to an xml file tree, but I am allowing an include element in the xml so the tree can go across multiple files. I'd like to set the itemssource property of treeviewitems within my treeview upon expansion.

Answer

Thomas Levesque picture Thomas Levesque · Sep 7, 2009

You can use the TreeViewItem.Expanded event as an attached event :

<TreeView TreeViewItem.Expanded="TreeViewItem_Expanded"
          ItemsSource="{Binding}">
    ...
</TreeView/>

In code-behind, you can identify the TreeViewItem that initiated the event using the OriginalSource property :

    private void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
    {
        TreeViewItem tvi = e.OriginalSource as TreeViewItem;
        if (tvi != null)
        {
            MessageBox.Show(string.Format("TreeNode '{0}' was expanded", tvi.Header));
        }
    }