0

我在 TreeView 控件中显示节点,并且在使用泛型正确显示数据时遇到问题。更具体地说,WPF 似乎无法定位数据模板。我猜这是因为 x:Type 被声明为NodeViewModel`1,而实际类型为NodeViewModel< INode>. 但是,如果我尝试使用NodeViewModel< INode>.

我有一个 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; }
}
4

1 回答 1

1

我认为不支持您尝试做的事情。您可能可以编写一个自定义MarkupExtension来返回一个封闭的泛型类型,但看起来您想DataTemplate对任何NodeViewModel<T> where T : INode. 在这种情况下,WPF 需要支持开放泛型作为键。它没有。

如果是这种情况,你最好只给你HierarchicalDataTemplate一个密钥,然后直接将它应用到TreeView.

或者创建一个DataTemplateSelector并检查数据项的类型以选择正确的模板。

于 2013-07-08T21:27:42.347 回答