2013-07-08 2 views
0

TreeView 컨트롤에 노드를 표시하고 있으며 제네릭으로 올바르게 표시되도록 데이터를 가져 오는 데 문제가 있습니다. 특히 WPF에서 데이터 템플릿을 찾는 데 문제가있는 것으로 보입니다. x : Type이 NodeViewModel`1으로 선언되었고 실제 유형은 NodeViewModel< INode>이기 때문에 추측 할 수 있습니다. 그러나 NodeViewModel< INode>을 사용하려고하면 XAML이 컴파일되지 않습니다.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을 작성할 수 있지만 NodeViewModel<T> where T : INode에 대해 동일한 DataTemplate을 사용하려는 것으로 보입니다. 이 경우 WPF는 공개 제네릭을 키로 지원해야합니다. 그렇지 않습니다.

그런 경우라면 HierarchicalDataTemplate 키를주고 TreeView에 직접 적용하는 것이 좋습니다.

또는 DataTemplateSelector을 만들고 데이터 항목의 유형을 확인하여 적절한 템플릿을 선택하십시오.

+0

정확히 내가하려는 일입니다. 아베. 나는 그것이 두려웠다. 이 코드는 훨씬 간단하게 시작되었습니다. 새로운 요구 사항이있을 때마다 계속해서 눈을 뜨고 있습니다. 나는 당신이 RAD (Requirements As-you-go Development)를하고 있다고 말할 수 있다고 생각합니다. 감사. 당신이 제안한대로 시도해 볼게요. –

관련 문제