Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Wpf 具有附加属性的嵌套TreeView_Wpf_Treeview_Hierarchicaldatatemplate - Fatal编程技术网

Wpf 具有附加属性的嵌套TreeView

Wpf 具有附加属性的嵌套TreeView,wpf,treeview,hierarchicaldatatemplate,Wpf,Treeview,Hierarchicaldatatemplate,这个问题以前已经解决了,但我只是没有从网上找到的例子中得到答案 我有一个类,比如“ClassA”,这个类有两个字符串属性,“Property1”和“Property2”,还有一个IEnumerable,其中“ClassB”也有两个属性。ClassB的列表将全部显示在嵌套的树视图中 我想在树状视图中显示这些内容,如下所示: -ClassA[0] ClassA.Property1 ClassA.Property2 -ClassA.ClassB Title ClassB[0]

这个问题以前已经解决了,但我只是没有从网上找到的例子中得到答案

我有一个类,比如“ClassA”,这个类有两个字符串属性,“Property1”和“Property2”,还有一个IEnumerable,其中“ClassB”也有两个属性。ClassB的列表将全部显示在嵌套的树视图中

我想在树状视图中显示这些内容,如下所示:

-ClassA[0] ClassA.Property1 ClassA.Property2 -ClassA.ClassB Title ClassB[0] ClassB[1] Etc. +ClassA[1] +ClassB[2] -A类[0] A类财产1 A类物业2 -ClassA.ClassB标题 B类[0] B类[1] 等 +A类[1] +B类[2] 我的理解是,实现这一点的方法是使用HierarchycalDataTemplates,但是我能找到的所有示例都只告诉我如何做:

-ClassA[0] -ClassA.ClassB Title ClassB[0] ClassB[1] Etc. +ClassA[1] +ClassB[2] -A类[0] -ClassA.ClassB标题 B类[0] B类[1] 等 +A类[1] +B类[2] 我不知道如何在模板中获取ClassA的属性。我想它应该是ClassA类型上的一个数据模板,但有些东西没有点击

非常感谢您的帮助


谢谢

嗯,我回答了我自己的问题,但我认为这不是正确的方式

我在treeview上使用了一个itemtemplate,然后在该模板的内部创建了另一个treeview,上面还有另一个itemtemplate

但是,当我看它与看HierarchycalDataTemplates时,我可以理解这一点

WPF:


课程:

public class ClassA
{
    public string MetaData1 { get; set; }
    public string MetaData2 { get; set; }
    public string FileName { get; set; }
    public List<ClassB> Mappings { get; set; }
}

public class ClassB
{
    public string Original { get; set; }
    public string Mapping { get; set; }
}
公共类ClassA
{
公共字符串元数据1{get;set;}
公共字符串元数据2{get;set;}
公共字符串文件名{get;set;}
公共列表映射{get;set;}
}
公共B类
{
公共字符串原始{get;set;}
公共字符串映射{get;set;}
}
快速实现我的数据结构:

new List<ClassA>
                    {
                        new ClassA
                            {
                                FileName = "ClassA 1",
                                MetaData1 = "Prop 1",
                                MetaData2 = "Prop 2",
                                Mappings = new List<ClassB>
                                            {
                                                new ClassB
                                                {
                                                    Original = "BProp 1",
                                                    Mapping = "BProp 2"
                                                }
                                            }
                            },
                        new ClassA
                            {
                                FileName = "ClassA 2",
                                MetaData1 = "Prop 1",
                                MetaData2 = "Prop 2",
                                Mappings = new List<ClassB>
                                            {
                                                new ClassB
                                                {
                                                    Original = "BProp 1",
                                                    Mapping = "BProp 2"
                                                }
                                            }
                            }
                    };
新列表
{
新甲级
{
FileName=“ClassA 1”,
MetaData1=“Prop 1”,
MetaData2=“Prop 2”,
映射=新列表
{
新B级
{
Original=“BProp 1”,
Mapping=“BProp 2”
}
}
},
新甲级
{
FileName=“ClassA 2”,
MetaData1=“Prop 1”,
MetaData2=“Prop 2”,
映射=新列表
{
新B级
{
Original=“BProp 1”,
Mapping=“BProp 2”
}
}
}
};
如果有人知道我应该如何做得更好的话(使用HierachicalDataTemplates和DataTemplates),我愿意看到这些代码并在此基础上进行改进

new List<ClassA>
                    {
                        new ClassA
                            {
                                FileName = "ClassA 1",
                                MetaData1 = "Prop 1",
                                MetaData2 = "Prop 2",
                                Mappings = new List<ClassB>
                                            {
                                                new ClassB
                                                {
                                                    Original = "BProp 1",
                                                    Mapping = "BProp 2"
                                                }
                                            }
                            },
                        new ClassA
                            {
                                FileName = "ClassA 2",
                                MetaData1 = "Prop 1",
                                MetaData2 = "Prop 2",
                                Mappings = new List<ClassB>
                                            {
                                                new ClassB
                                                {
                                                    Original = "BProp 1",
                                                    Mapping = "BProp 2"
                                                }
                                            }
                            }
                    };