次の方法で共有


方法 : 深度がわからないデータに TreeView をバインドする

更新 : 2008 年 7 月

深度がわからないデータ ソースに TreeView をバインドすることが必要になる場合があります。たとえば、フォルダ内にフォルダが含まれる可能性のあるファイル システムなど、データが再帰的な性質を持つ場合や、従業員が他の従業員を直属の部下として持つ企業の組織構造などの場合があります。

データ ソースには階層的なオブジェクト モデルが必要です。たとえば、Employee には、従業員の直属の部下である Employee オブジェクトのコレクションが含まれることが考えられます。データが階層的ではない方法で表現されている場合は、そのデータの階層的な表現を作成する必要があります。

ItemsControl.ItemTemplate プロパティを設定するときに、ItemsControl がそれぞれの子項目用に ItemsControl を生成する場合、子の ItemsControl は親と同じ ItemTemplate を使用します。たとえば、ItemTemplate プロパティをデータ バインド TreeView に設定する場合、生成される各 TreeViewItem は、TreeViewItemTemplate プロパティに割り当てられた 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 月

トピックを追加

情報の拡充