我在TreeView控件中显示节点,我遇到了使用泛型正确显示数据的问题。更具体地说,WPF似乎无法定位数据模板。我猜这是因为x:Type被声明为NodeViewModel`1
,实际类型是NodeViewModel< INode>
。但是,如果我尝试使用NodeViewModel< INode>
,则XAML将无法编译。
我有一个HierachialDataTemplate,如下所示:
<HierarchicalDataTemplate
ItemsSource="{Binding Path=Children}"
DataType="{x:Type viewModels:NodeViewModel`1}">
<TextBlock Text="{Binding Path=Node.NodeDescription}" />
</HierarchicalDataTemplate>
NodeViewModel声明为:
public class NodeViewModel<T> where T : INode
{
public T Node { get {...} set {...} }
}
节点接口看起来像这样:
public interface INode
{
string NodeDescription { get; }
}
答案 0 :(得分:1)
我认为不支持您正在尝试做的事情。您可以编写自定义MarkupExtension
来返回已关闭的泛型类型,但看起来您希望对任何DataTemplate
使用相同的NodeViewModel<T> where T : INode
。在这种情况下,WPF需要支持开放泛型作为键。它没有。
如果是这种情况,那么只需给HierarchicalDataTemplate
一个密钥并将其直接应用到TreeView
,你就会好得多。
或创建DataTemplateSelector
并检查数据项的类型以选择正确的模板。