具有循环类型引用的树的TreeView模板

本文关键字:TreeView 模板 引用 类型 循环 循环类 | 更新日期: 2023-09-27 18:19:47

我需要显示一个绑定到这种层次对象的树:

public class Node
{
    public string Name
    public List<Connector> Connector;
}
public class Connector
{
    public string Name
    public List<Node> TrueChildren;
}

因此一个节点的实际子节点在另一个对象中。

无法制作TreeView模板来使用它。似乎我需要循环模板,这在WPF中是不可能的。我觉得我错过了一些显而易见的东西。

具有循环类型引用的树的TreeView模板

这不一定是循环的,只有当Connector.Children包含对当前节点路径上更高级别节点的引用时,它才是循环的(即使这样也应该可以使用虚拟化来处理)。

通常,您只需要在TreeView的资源中创建两个HierarchicalDataTemplates,而不需要任何x:Key,而是将DataType设置为相应的类型。

<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type local:Node}"
                              ItemsSource="{Binding Connector}">
        <TextBlock Text="{Binding Name}"/>
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate DataType="{x:Type local:Connector}"
                              ItemsSource="{Binding TrueChildren}">
        <TextBlock Text="{Binding Name}"/>
    </HierarchicalDataTemplate>
<TreeView.Resources>

(如果您想知道为什么要读取属性引用,在DataType中使用x:Type非常重要)