我的TreeView中选择了哪个项目

时间:2011-09-28 07:39:27

标签: c# wpf xaml recursion treeview

在我的应用程序中,我通过绑定构建TreeView。 ItemSource包含类型为X的项目列表 X有一个属性'Properties',其中一些属性是对父列表中项目的引用。

TreeView从选定的根(列表中的项目)开始。作为引用的所有属性都将作为TreeViewItems添加到此根目录。但是,它们也可以扩展,直到达到或不结束;我的意思是理论上这可能是无限递归,因为参考可能是指自身。

现在的问题是,如何知道选择了哪个项目?
我需要知道水平及其所有父母。

我想到了这些事情:

  • 在扩展树时,跟踪水平和父母 这显然不起作用,因为在选择另一个父项下面的其他项目后,我会忘记另一条路径。
  • 检查e.OldValue。这也与上次尝试的原因相同。
  • 在扩展(并创建)TreeView时,在代码后面的c#中构造一个类似TreeView的变量 起初,这似乎非常接近解决方案,因为您无法从创建它们的TreeView中删除节点。例如:你进入第5级并折叠第一级。如果展开第一级,您将看到与崩溃前相同的路径。

要以这种方式创建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的帮助下,我能够检索到正确的父级。

1 个答案:

答案 0 :(得分:1)

查找VisualTree怎么样?你可以上去,直到你到达顶部项目。在评估所有单个项目之前。