Get parent node of child in WPF C # TreeView

I understand that programming in C # with WPF is different from traditional C # procedures, so most online materials do not indicate what I need.

I have a TreeView control in my WPF window, and I have parent nodes and child nodes. I would like to save them in a list of type Node (id, name, parent).

enter image description here

I got the name of the selected / node element using this:

private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) { TreeViewItem item = treeView.SelectedItem as TreeViewItem; nameTxt.Text = item.Header.ToString(); } 

And I tried to get the Node child's parent just before that using this:

 TreeViewItem item = treeView.SelectedItem as TreeViewItem; nameTxt.Text = item.Parent.ToString(); 

However, this returns the root parent (A) instead of the parent parent (which is 2).

What changes should be made to get the parent parent instead of the root parent? :)

EDIT: here is XAML

 <TreeView Name="treeView" HorizontalAlignment="Left" Height="564" Margin="10,68,0,0" VerticalAlignment="Top" Width="363"> <TreeViewItem TreeViewItem.Selected="TreeViewItem_OnItemSelected" Header="A" IsExpanded="True" Height="554" FontSize="18"> <TreeViewItem Header="1" /> <TreeViewItem Header="2" /> </TreeViewItem> </TreeView> 
+6
source share
1 answer

A small example is created to demonstrate your problem.

In MainWindow.xaml

  <TreeView Name="tree"> <TreeView> <TreeViewItem Header="North America" Selected="TreeViewItem_OnItemSelected"> <TreeViewItem Header="USA"> <TreeViewItem Header="New York"/> <TreeViewItem Header="Las Vegas"/> <TreeViewItem Header="Washington"/> </TreeViewItem> <TreeViewItem Header="Canada"> <TreeViewItem Header="Toronto"/> <TreeViewItem Header="Quebec"/> <TreeViewItem Header="Montreal"/> </TreeViewItem> <TreeViewItem Header="Mexico"></TreeViewItem> </TreeViewItem> </TreeView> </TreeView> 

in code behind ie MainWindow.xaml.cs

  private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e) { TreeViewItem item = e.OriginalSource as TreeViewItem; if (item != null) { ItemsControl parent = GetSelectedTreeViewItemParent(item); TreeViewItem treeitem = parent as TreeViewItem; string MyValue= treeitem .Header.ToString();//Gets you the immediate parent } } public ItemsControl GetSelectedTreeViewItemParent(TreeViewItem item) { DependencyObject parent = VisualTreeHelper.GetParent(item); while (!(parent is TreeViewItem || parent is TreeView)) { parent = VisualTreeHelper.GetParent(parent); } return parent as ItemsControl; } 

And everything is done.

+14
source

Source: https://habr.com/ru/post/983691/


All Articles