我有一个使用 a 的 WPF 应用程序TreeView
,其中TreeView
有多个HierarchicalDataTemplates
/DataTemplates
代表不同的类型,每个应用程序都包含 aContentControl
和特定的Template
,如下所示:
TreeView
|- HierarchicalDataTemplate for Type a
| |- ContentControl
|
|- DataTemplate for Type b
|- ContentControl
该类型的b
构建方式如下:
b
|-integer c
|-object d
d
可以是从整数到字符串的任何内容,但也可以是包含列表的类。在这种情况下,我想显示d
使用上述内容HierarchicalDataTemplate
的列表。TreeView
有没有办法做到这一点,或者TreeView
一旦我输入DataTemplate
/ ContentControl
/ ,我就会失去与层次结构的所有连接吗Template
?
对于像这样的复杂场景,您可以实现自定义
DataTemplateSelector
.A
根据您的描述,我假设和的数据类型类似于这些,并且具有和 的B
属性:C
D
您可以为每种类型和用途创建自定义数据模板。对于
B
,会有一个DataTemplate
表示常规类型的 a 和一个HierarchicalDataTemplate
表示当D
是集合时的情况:x:Key
需要使用 s 来解析数据模板DataTemplateSelector
。在这种情况下,我们将检查某个项目是否属于类型A
并使用ATemplate
. 如果是B
,我们通过检查属性来检查其模板是否需要分层D
。如果它是一个集合 - 或者更一般地说是一个IEnumerable
,我们使用分层模板。但是,请注意,某些类型string
也是可数的,因此我们需要进行单独的检查。无论您是为模板名称创建常量,还是从类型名称构建键,或者公开属性来分配数据模板,都取决于您的要求。