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吗?
发布于 2016-02-22 23:23:07
HierarchicalDataTemplate有一个DataType属性,所以您可以像为DataTemplate那样使用它来指定类型。假设您将层次结构包装在视图模型中:
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的资源块中:
<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>结果:

https://stackoverflow.com/questions/35564985
复制相似问题