首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不同嵌套类型的HierarchicalDataTemplate

使用不同嵌套类型的HierarchicalDataTemplate
EN

Stack Overflow用户
提问于 2016-02-22 22:13:14
回答 1查看 3K关注 0票数 2

HierarchicalDataTemplate上似乎有大量的信息,但我很难找到足够具体的信息来帮助我处理包含不同类型的层次结构。

假设有以下类结构:

代码语言:javascript
复制
public class classA
{
    public string name{get;set;}
}
public class classB
{
    public string name{get;set;}
    public List<classA> subItems{get;set;}
}
public class classC
{
    public string name{get;set;}
    public List<classB> subItems{get;set;}
}

现在假设类没有自我引用--因此在我的层次结构中保持一个类型--是包含它们的属性存在根本差异,有方法创建类型敏感的HierarchicalDataTemplate吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-22 23:23:07

HierarchicalDataTemplate有一个DataType属性,所以您可以像为DataTemplate那样使用它来指定类型。假设您将层次结构包装在视图模型中:

代码语言:javascript
复制
public class MyViewModel
{
    public List<classC> Items { get; set; }
}

然后创建这样的层次结构:

代码语言:javascript
复制
this.DataContext = new MyViewModel
{
    Items = new List<classC>
    {
        new classC
        {
            name = "Class C",
            subItems = new List<classB> {
                new classB{
                    name = "Class B1",
                    subItems = new List<classA>{
                        new classA {name="Class A1a"},
                        new classA {name="Class A1b"},
                        new classA {name="Class A1c"},
                    }
                },
                new classB{
                    name = "Class B2",
                    subItems = new List<classA>{
                        new classA {name="Class A2a"},
                        new classA {name="Class A2b"},
                        new classA {name="Class A2c"},
                    }
                }
            }
        }
    }
};

然后,在XAML中,只需将相关的DataTemplates和HierarchicalDataTemplates添加到TreeView的资源块中:

代码语言:javascript
复制
<TreeView ItemsSource="{Binding Items}">
    <TreeView.Resources>

        <DataTemplate DataType="{x:Type local:classA}" >
            <TextBlock Text="{Binding name}" Foreground="Blue" />
        </DataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:classB}" ItemsSource="{Binding subItems}" >
            <TextBlock Text="{Binding name}" Foreground="Green" />
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:classC}" ItemsSource="{Binding subItems}" >
            <TextBlock Text="{Binding name}" Foreground="Red" />
        </HierarchicalDataTemplate>

    </TreeView.Resources>
</TreeView>

结果:

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35564985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档