gpt4 book ai didi

c# - 使用具有不同嵌套类型的 HierarchicalDataTemplate

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:47 26 4
gpt4 key购买 nike

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

假设类结构如下:

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?

最佳答案

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

public class MyViewModel
{
public List<classC> Items { get; set; }
}

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

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 的资源 block 中:

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

结果:

enter image description here

关于c# - 使用具有不同嵌套类型的 HierarchicalDataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com