3

这个问题以前已经解决了,但我只是没有通过我在网上找到的例子来解决这个问题。

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

我希望这些显示在树视图中,如下所示:

-A级[0]
  ClassA.Property1
  ClassA.Property2
  -ClassA.ClassB 标题
   B类[0]
   B类[1]
   等等。
+A级[1]
+B级[2]

据我了解,实现此目的的方法是使用 HierarchicalDataTemplates 但是我能找到的所有示例都只告诉我如何做:

-A级[0]
  -ClassA.ClassB 标题
   B类[0]
   B类[1]
   等等。
+A级[1]
+B级[2]

我不知道如何在模板中获取 ClassA 的属性。我认为这将是 ClassA 类型的 DataTemplate,但没有点击。

任何帮助是极大的赞赏。

谢谢!

4

1 回答 1

1

好吧,我回答了我自己的问题,但我认为这不是解决这个问题的正确方法。

我在树视图上使用了一个项目模板,然后在该模板内创建了另一个树视图,上面还有另一个项目模板。

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

WPF:

    <TreeView HorizontalAlignment="Left" Name="treeView1" VerticalAlignment="Top">
        <TreeView.ItemTemplate>
            <DataTemplate>
                <TreeViewItem Header="{Binding FileName}">
                    <TextBlock Text="{Binding MetaData1}"/>
                    <TextBlock Text="{Binding MetaData2}"/>
                    <TreeViewItem ItemsSource="{Binding Mappings}" Header="Mappings">
                        <TreeViewItem.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="17"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Text="{Binding Original}" Grid.Column="0"/>
                                    <TextBlock Text="->" Grid.Column="1" Margin="3,0,3,0"/>
                                    <TextBlock Text="{Binding Mapping}" Grid.Column="2"/>
                                </Grid>
                            </DataTemplate>
                        </TreeViewItem.ItemTemplate>
                    </TreeViewItem>
                </TreeViewItem>
            </DataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

课程:

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

我的数据结构的快速实现:

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"
                                                }
                                            }
                            }
                    };

如果有人知道我应该如何做得更好(使用 HierachicalDataTemplates 和 DataTemplates 我愿意查看该代码并对此进行改进。

于 2010-09-08T17:53:51.287 回答