在我的应用程序中,我通过绑定构建TreeView。 ItemSource包含类型为X的项目列表 X有一个属性'Properties',其中一些属性是对父列表中项目的引用。
TreeView从选定的根(列表中的项目)开始。作为引用的所有属性都将作为TreeViewItems添加到此根目录。但是,它们也可以扩展,直到达到或不结束;我的意思是理论上这可能是无限递归,因为参考可能是指自身。
现在的问题是,如何知道选择了哪个项目?
我需要知道水平及其所有父母。
我想到了这些事情:
e.OldValue
。这也与上次尝试的原因相同。要以这种方式创建TreeView,我必须覆盖DataTemplateSelector。 (C#)
public class TreeViewDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null)
{
if (item is Entity)
return element.FindResource("XTemplate") as DataTemplate;
else
return element.FindResource("PropertyWithReferenceTemplate") as DataTemplate;
}
return null;
}
}
Binding和HierarachialDataTemplate。 (XAML)
<TreeView ItemsSource="{Binding ElementName=view, Path=XDefinition}" ItemTemplateSelector="{StaticResource treeViewDataTemplateSelector}" SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeView.Resources>
<HierarchicalDataTemplate x:Key="XTemplate" ItemsSource="{Binding Path=Properties}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="PropertyWithReferenceTemplate" ItemsSource="{Binding Path=ReferenceToX.Properties,}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
有人可以帮我解决这个问题吗?
如果您还需要了解其他信息,请告诉我,我会更新我的问题。
解决方案 我不得不将我的事件SelectedItemChanged =“TreeView_SelectedItemChanged”更改为TreeViewItem.Selected =“TreeViewItem_Selected”。在LogicalTreeHelper.GetParent的帮助下,我能够检索到正确的父级。
答案 0 :(得分:1)
查找VisualTree怎么样?你可以上去,直到你到达顶部项目。在评估所有单个项目之前。