2009-02-26 4 views
0

SQL 쿼리의 결과로 DataSet이 있으면이를 직접 TreeView에 바인딩하고 내 데이터의 계층 구조를 표시 할 수 있습니까? 여러 개의 HierarchicalDataTemplates를 사용해야한다는 것을 알고 있지만 각 데이터에 어떤 데이터를 표시할지 알려주지 않습니다. 나는 4 수준의 계층 구조가있는 경우어떻게 데이터 집합을 TreeView (계층 구조 포함)에 직접 바인딩 할 수 있습니까?

, 그래서 같은 :

<HierarchicalDataTemplate x:Key="FirstLevelTemplate" ItemTemplate="{StaticResource SecondLevelTemplate}"/> 
<HierarchicalDataTemplate x:Key="SecondLevelTemplate" ItemTemplate="{StaticResource ThirdLevelTemplate}"/> 
<HierarchicalDataTemplate x:Key="ThirdLevelTemplate" ItemTemplate="{StaticResource FourthLevelTemplate}"/> 
<DataTemplate x:Key="FourthLevelTemplate"/> 

어떤 특성 (들)은 데이터 집합에서 직접 내 데이터를 표시하도록 설정해야?

편집 : 이상적으로는 하나의 자체 참조 DataTable을 사용하고 싶습니다.

답변

1

나는 당신이 할 수 있다고 생각하지 않습니다.

Treeview 컨트롤 및 HierarchicalDataTemplate에는 개체 계층 구조가 필요합니다. DataSet은 본질적으로 평평합니다.

당신은 어떻게 든 그 데이터 세트를 각각의 "Children"컬렉션을 가진 객체의 계층 구조로 변환해야 할 것입니다. treeview의 ItemsSource는 "최상위 컬렉션"(부모 참조가없는 행)에 바인딩됩니다.

각 HierarchicalDataTemplate의 ItemsSource 속성은 해당 Children 속성에 바인딩됩니다.

변환기를 사용하는 솔루션이있을 수 있지만 존재하는 경우 바인딩하기 전에 데이터를 곧바로 위로 다시 만드는 것보다 더 복잡해집니다.

+0

나는 프로그래밍 방식으로 TreeViewItems의 계층 구조를 만들었고, 그것은 작동하는 것처럼 보였습니다 (아마도 이것이 최선의 방법은 아니지만). 감사! – Pwninstein

0

먼저 TreeView의 ItemsSource를 DataSet으로 설정합니다.

다음으로 TreeView의 ItemTemplate을 FirstLevelTemplate으로 설정합니다.

ItemTemplate="{StaticResource FirstLevelTemplate}" 

첫 번째 템플릿은 두 번째 레벨 템플릿을 사용할 항목을 참조해야합니다. 과 같이이 계층 템플릿에 항목 소스를 추가

<HierarchicalDataTemplate x:Key="FirstLevelTemplate" ItemsSource="{Binding ChildItems}" ItemTemplate="{StaticResource SecondLevelTemplate}"/> 

변경 "ChildItems는"하위 항목을 포함하여 데이터 집합 내에서 속성을 참조 할 수 있습니다. 각 HierarchicalDataTemplate에 대해이를 반복합니다.

마지막으로 데이터를 표시하려면 DataTemplates에 컨트롤을 추가해야합니다. 다음은 간단한 예입니다.

<DataTemplate x:Key="FourthLevelTemplate"/> 
    <Border BorderThickness="1" BorderBrush="Gray" CornerRadius="3"> 
     <TextBlock Text="{Binding DataProperty}" 
       HorizontalAlignment="Center" VerticalAlignment="Center"/> 
    </Border> 
</DataTemplate> 

이 경우 "DataProperty"를 데이터 필드의 속성 이름으로 바꿉니다. 추가 데이터를 표시하기 위해 다른 컨트롤 (예 : TextBox, ComboBox 등)을 추가 할 수 있습니다.

+0

2 단계 하위의 컨트롤 템플릿을 설정하는 방법이 있습니까? – Echilon

+0

제안 사항은 각 레벨에 대해 HierarchicalDataTemplate을 만드는 것이 었습니다. 두 번째 레벨은 "SecondLevelTemplate"과 같이 호출됩니다. 이 템플릿의 컨트롤은 두 번째 수준으로 표시됩니다. "ControlTemplate"을 원한다면 DataTemplate에서 Control을 사용하고 TemplateTemplate 속성을 설정하십시오. –

1

이 사이트는 treeview를 사용하는 아주 좋은 예가 있습니다.

BeaStollnitz

관련 문제