Search code examples
silverlightxamlsilverlight-toolkit

Silverlight Toolkit Treeview: Getting the parent of a selected item


I'm using the TreeView component from the Silverlight toolkit and I'm trying to get the parent of a selected node. The TreeView is bound to a series of objects, so directly working with a TreeViewItem appears to be out of the question.

<toolkit:TreeView SelectedItemChanged="DoStuff" DisplayMemberPath="Name" ItemsSource="{Binding MyCollection}">
    <toolkit:TreeView.ItemTemplate>
        <common:HierarchicalDataTemplate ItemsSource="{Binding MySubCollection}">
            <StackPanel>
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </common:HierarchicalDataTemplate>
    </toolkit:TreeView.ItemTemplate>
</toolkit:TreeView>

Is there a way to fetch the parent of an item selected in the DoStuff event?


Solution

  • As long as you've downloaded the latest Silverlight Toolkit then this is easy using the TreeViewExtensions that are included.

    1. Download the Silverlight Toolkit and install.
    2. Add a reference to System.Windows.Controls.Toolkit (from the Silverlight Toolkit)
    3. Use the GetParentItem() extension method, like so:

      private void DoStuff(object sender, RoutedPropertyChangedEventArgs<object> e)
      {
          if (e.NewValue != null)
          {
              var parent = ((TreeView)sender).GetParentItem(e.NewValue);
              //
              // Do stuff with parent, this snippet updates 
              // a TextBlock showing the name of the current parent
              if (parent != null)
              {
                   Status.Text = parent.ToString();
              }
          }
      }