2013-07-08 4 views
0

Я показываю узлы в элементе управления TreeView, и у меня возникают проблемы с правильной отображением данных с помощью дженериков. Более конкретно, кажется, что WPF испытывает трудности с поиском шаблона данных. Я предполагаю, что это потому, что x: Type объявлен как NodeViewModel`1, а фактический тип - NodeViewModel< INode>. Тем не менее, XAML не будет компилироваться, если я попытаюсь использовать NodeViewModel< INode>.Как получить DataTemplate для распознавания GenericType

У меня 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; } 
} 

ответ

1

Я не думаю, что там то, что вы пытаетесь сделать, поддерживается. Вероятно, вы могли бы написать обычай MarkupExtension, чтобы вернуть закрытый тип общего типа, но похоже, что вы хотите использовать тот же DataTemplate для любых NodeViewModel<T> where T : INode. В этом случае WPF должен будет поддерживать открытые дженерики как ключи. Что это не так.

Если это так, вам гораздо лучше, просто давая ключ HierarchicalDataTemplate и применяя его непосредственно к TreeView.

Или создайте DataTemplateSelector и проверьте тип элемента данных, чтобы выбрать правильный шаблон.

+0

Это именно то, что я пытаюсь сделать, Абэ. Я боялся, что это так. Этот код начал намного проще; но с каждым новым требованием. Думаю, вы могли бы сказать, что я делаю RAD (Требования As-you-go Development). Благодарю. Я попробую, как вы предложили. –