다음을 통해 공유


방법: 깊이를 확인할 수 없는 데이터에 TreeView 바인딩

업데이트: 2008년 7월

깊이를 알 수 없는 데이터 소스에 TreeView를 바인딩해야 할 경우가 있습니다. 폴더에 폴더가 포함되는 파일 시스템이나 직원이 다른 직원을 직속 부하로 두는 회사의 조직 구조와 같이 데이터의 성격이 재귀적인 경우를 예로 들 수 있습니다.

이러한 데이터 소스에는 계층적 개체 모델이 있어야 합니다. 예를 들어 Employee 클래스에는 한 직원의 직속 부하인 Employee 개체의 컬렉션이 포함될 수 있습니다. 데이터가 계층적 방식이 아닌 다른 방식으로 표현되는 경우 데이터에 대한 계층적 표현을 만들어야 합니다.

ItemsControl.ItemTemplate 속성을 설정하고 ItemsControl이 각 자식 항목에 대해 ItemsControl을 생성하는 경우 자식 ItemsControl은 동일한 ItemTemplate을 부모로 사용합니다. 예를 들어 데이터 바인딩 TreeViewItemTemplate 속성을 설정하면, 생성되는 각 TreeViewItemTreeViewItemTemplate 속성에 할당된 DataTemplate을 사용합니다.

HierarchicalDataTemplate을 사용하면 TreeViewItem에 대해 ItemsSource를 지정하거나 데이터 템플릿에 임의의 HeaderedItemsControl을 지정할 수 있습니다. HierarchicalDataTemplate.ItemsSource 속성을 설정하면 HierarchicalDataTemplate이 적용될 때 해당 값이 사용됩니다. HierarchicalDataTemplate을 사용하면 TreeView의 각 TreeViewItem에 대해 ItemsSource를 재귀적으로 설정할 수 있습니다.

예제

다음 예제에서는 TreeView를 계층적 데이터에 바인딩한 다음 HierarchicalDataTemplate을 사용하여 각 TreeViewItem에 대한 ItemsSource를 지정하는 방법을 보여 줍니다. TreeView는 회사의 직원을 나타내는 XML 데이터에 바인딩됩니다. 각 Employee 요소는 해당 부하 직원을 나타내는 다른 Employee 요소를 포함할 수 있습니다. 데이터가 재귀적이므로 HierarchicalDataTemplate을 각 수준에 적용할 수 있습니다.

<Page 
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <XmlDataProvider x:Key="myCompany" XPath="Company/Employee">
      <x:XData>
        <Company >
          <Employee Name="Don Hall">
            <Employee Name="Alice Ciccu">
              <Employee Name="David Pelton">
                <Employee Name="Vivian Atlas"/>
              </Employee>
              <Employee Name="Jeff Price"/>
              <Employee Name="Andy Jacobs"/>
            </Employee>
            <Employee Name="Bill Malone">
              <Employee Name="Maurice Taylor"/>
              <Employee Name="Sunil Uppal"/>
              <Employee Name="Qiang Wang"/>
            </Employee>
          </Employee>
        </Company>
      </x:XData>
    </XmlDataProvider>

    <!-- Bind the HierarchicalDataTemplate.ItemsSource property to the employees under
         each Employee element. -->
    <HierarchicalDataTemplate x:Key="EmployeeTemplate" 
                              ItemsSource="{Binding XPath=Employee}">
      <TextBlock Text="{Binding XPath=@Name}" ></TextBlock>
    </HierarchicalDataTemplate>

    <Style TargetType="TreeViewItem">
      <Setter Property="IsExpanded" Value="True"/>
    </Style>
  </Page.Resources>

  <Grid>
    <TreeView ItemsSource="{Binding Source={StaticResource myCompany}}" 
              ItemTemplate="{StaticResource EmployeeTemplate}"/>
  </Grid>
</Page>

참고 항목

개념

데이터 바인딩 개요

데이터 템플릿 개요

변경 기록

날짜

변경 내용

이유

2008년 7월

항목이 추가되었습니다.

향상된 기능 관련 정보