2

嗨,我正在使用接口 IFooNode,它是树的一部分。
我想使用 HierarchicalDataTemplate 在 TreeView 中显示这棵树。但是,由于界面原因,这不起作用。我看到两种方法,我都不会称之为“好”

  1. 找出真正实现 IFooNode 的类型(我们称之为 FooNode...),然后找到定义 FooNode 的程序集,添加对该程序集的引用并为 FooNode 创建一个 HierarchicalDataTemplate(希望实现类永远不会改变...)

  2. 编写一个包装 IFooNode 的类 MyCoolIFooNodeWrapperForWpf,不绑定到树,而是从树根填充 MyCoolIFooNodeWrapperForWpf 的列表,并为 MyCoolIFooNodeWrapperForWpf 创建一个 HierarchicalDataTemplate。

无论数据是什么类型,我都可以以某种方式始终应用 HierarchicalDataTemplate(我认为这将是较小的邪恶......)

还有其他想法吗?

4

2 回答 2

2

您可以使用 ItemTemplateSelector。在选择器的代码中,您可以检查您的数据对象实现的接口,并为此项目选择适当的 DataTemplate/HeirarchicalDataTemplate。

选择器既可以应用于容器本身 (ItemsControl.ItemTemplateSelector),也可以应用于您的分层数据模板 (HeirarchicalDataTemplate.ItemTemplateSelector)。

我认为这是较小的邪恶。

于 2010-12-26T16:26:30.040 回答
0

如果您不是从多个模板中进行选择,则无需在模板上指定数据类型。如果树中的所有对象都实现了您的接口,只需使用该接口的属性插入模板即可。您无需在模板中执行任何操作即可使其特定于该界面。

如果由于某种原因需要根据对象支持的接口进行模板选择,则需要实现模板选择器,并处理阻止 WPF 内置模板选择机制使用接口的多对一问题首先。(也就是说,如果你有一个IFoo和的模板,你为支持IBar的对象使用什么模板?)IFoo IBar

于 2010-12-26T22:01:52.307 回答