Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有循环类型引用的树的TreeView模板_C#_Wpf_C# 4.0 - Fatal编程技术网

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

C# 具有循环类型引用的树的TreeView模板,c#,wpf,c#-4.0,C#,Wpf,C# 4.0,我需要显示绑定到此类层次对象的树: public class Node { public string Name public List<Connector> Connector; } public class Connector { public string Name public List<Node> TrueChildren; } 公共类节点 { 公共字符串名 公共列表连接器; } 公共类连接器 { 公共字符串名 公共儿童名单;

我需要显示绑定到此类层次对象的树:

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

public class Connector
{
    public string Name
    public List<Node> TrueChildren;
}
公共类节点
{
公共字符串名
公共列表连接器;
}
公共类连接器
{
公共字符串名
公共儿童名单;
}
因此,节点的实际子节点位于另一个对象中


无法使TreeView模板使用它。似乎我需要循环模板,这在WPF中是不可能的。我觉得我遗漏了一些明显的东西。

这不一定是循环的,只有当连接器
子节点包含对当前节点路径上更高的节点的引用时才是循环的(甚至可以使用虚拟化以某种方式处理)

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

<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>


(在中使用
x:Type
很重要,如果您想知道为什么要阅读)

您将如何在
TreeView
上显示循环关系?节点的实例都是不同的。n1.连接器(c1,c2,c3),其中c1=(n2,n3),c2=(n3),c3=(n4,n5,n6),其中n2.连接器(c4,c5)。。。等这些值不是循环的。你是对的。我的错误是,我将这两个模板放入window.resource,并试图按名称绑定它们。