2014-06-17 3 views
0

MVVM 패턴과 함께 WPF를 사용하는 것과 관련된 대부분의 발견 된 (지금까지) 기사에서는 TreeView를 동일한 요소 트리에 바인딩하는 방법을 설명합니다. http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode.WPF, MVVM, 독점 트리에 대한 TreeView 바인딩

이 튜토리얼에서는 부모와 자식이있는 클래스 "person"과 같은 유형의 자식을 포함하는 단일 클래스 만 있습니다. TreeView는 HierarchicalDataTemplate을 사용하여 단일 클래스에 바인딩합니다.

나무를 만드는 다양한 클래스가 있으면 어떻게 될까요?

<a x=1> 
    <b x=2> 
     <c x=3 /> 
     <c x=3 /> 
    </b> 
</a> 

는 각각의 XML 요소가 다른 클래스에 싸여있다 : 예를 들어 같은 XML을 고려 클래스을, B와 C

어떻게 제대로들을 결합하는 XAML을 작성하는? XAML 아래에 제 2 개 계층을 표시하기 위하여

이 적합하다 :

<TreeView ItemsSource="{Binding As}"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Bs}"> 
      <TreeViewItem> 
       <TreeViewItem.Header> 
        <TextBlock Text="{Binding x}" /> 
       </TreeViewItem.Header> 
      </TreeViewItem> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
    </TreeView> 

하지만 어떻게 3 층, 즉 C를 포함?

답변

0

WPF에서 단일 컬렉션에 다른 데이터 형식을 표시 할 때 DataTemplate을 사용하여 각 형식의 모양을 정의합니다. 하지만 하나만 적용 할 수 있습니다 DataTemplate 나는 외침을 들었습니다. 우리가 이 아니면을 지정하지 않으면 x:Key 값을 지정합니다. 따라서 솔루션은 간단합니다 ... 각 데이터 형식에 대해 DataTemplate을 정의하고 을 지정하지 않으면x:Key 값을 설정합니다. 이렇게하면 프레임 워크가 암시 적으로 개별 항목에 적용합니다.

<DataTemplate DataType="{x:Type SomePrefix:SomeType}"> 
    ... 
</DataTemplate> 

...

<DataTemplate DataType="{x:Type SomePrefix:AnotherType}"> 
    ... 
</DataTemplate> 

솔루션의 마지막 부분은 모든 데이터 유형을 작성해야하는 기본 클래스 확장하도록하는 것입니다 :

public class SomeType : BaseDataType { ... } 

을 .. .

public class AnotherType: BaseDataType { ... } 

이제 데이터를 바인딩 할 수 있습니다. 해결책은 ...

public ObservableCollection<BaseDataType> Items { get; set; } 

Items.Add(new SomeType()); 
Items.Add(new AnotherType()); 

...

<TreeView ItemsSource="{Binding Items}" ... /> 
+0

위의 "ps"섹션을 참조하십시오. – etwas77

+0

* 단어 *를 사용하여 문제를 설명하십시오. – Sheridan

+0

죄송합니다. 단어로 : 만약 당신이 제안대로 정확하게 사용 : 나는 첫 번째 레이어를 참조하십시오. 원래의 예제에서와 같이 HierarchicalDataTemplate을 포함하여 수정하면 2 개의 레이어가 표시됩니다. 그게 다야. – etwas77

관련 문제