Я хочу, чтобы родительский узел, который выбран в качестве TreeViewItemПолучить родительский TreeViewItem выбранного узла в WPF
У меня есть класс Person с 2 полями. Имя (String) и дети (Список строки)
Это мой XAML код
<Grid x:Name="gridView" Margin="10">
<TreeView Name="treeView1" TreeViewItem.Selected="TreeViewItem_OnItemSelected" ItemsSource="{Binding}">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Source=Check, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type loc:Person}" ItemsSource="{Binding Children}" >
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
это мой код позади. Я установил источник элемента в список объектов Person.
void set()
{
if (treeView1.Items.IndexOf(treeView1.SelectedItem) != -1)
{
//is a parent
//returns -1 for children
Person selected = (Person)treeView1.SelectedItem;
int index = search(selected);
TreeViewItem parent = treeView1.Tag as TreeViewItem;
setSelected(parent,index);
}
else
{
//is a child
TreeViewItem child = treeView1.Tag as TreeViewItem; //returns the selected node
TreeViewItem parent = child.Parent as TreeViewItem; //returns null
}
}
private void TreeViewItem_OnItemSelected(object sender, RoutedEventArgs e)
{
treeView1.Tag = e.OriginalSource;
int ind = 0;
foreach (var _item in treeView1.Items)
{
if (_item == treeView1.SelectedItem)
{
selectedIndex = ind;
break;
}
ind++;
}
}
В остальной части child.Parent
всегда возвращает null. Я пробовал другие методы, но ни один из них не возвращал TreeViewItem
, вместо этого они возвращали DependencyObject
или ItemsControl
.
Я также пробовал метод ContainerFromItem
, но он работает только для прямых детей (родителей), а не для детей родителя.
Пожалуйста, помогите
Перемещение по WPF Пользовательский интерфейс иногда очень сложный. Если вы не смогли найти способ достичь этого, просто попробуйте добавить родителя в свой класс Person, который значительно упрощает навигацию. – Bijan