Partager via


Comment : lier un TreeView à des données dont la profondeur ne peut pas être déterminée

Mise à jour : Juillet 2008

Il se peut que vous souhaitiez lier un TreeView à une source de données dont la profondeur n'est pas connue. Cela peut se produire lorsque les données sont récursives par nature, comme dans un système de fichiers où les dossiers peuvent contenir des dossiers ou dans la structure organisationnelle d'une société où des employés sont subordonnés à d'autres employés.

La source de données doit posséder un modèle objet hiérarchique. Par exemple, une classe Employee peut contenir une collection d'objets Employee qui sont subordonnés à un employé. Si les données sont représentées d'une manière non hiérarchique, vous devez générer une représentation hiérarchique des données.

Lorsque vous définissez la propriété ItemsControl.ItemTemplate et que le ItemsControl génère un ItemsControl pour chaque élément enfant, alors le ItemsControl enfant utilise le même ItemTemplate que le parent. Par exemple, si vous définissez la propriété ItemTemplate sur un TreeView lié aux données, chaque TreeViewItem qui est généré utilise le DataTemplate qui a été assigné à la propriété ItemTemplate du TreeView.

HierarchicalDataTemplate permet de spécifier la propriété ItemsSource pour un TreeViewItem, ou n'importe quel HeaderedItemsControl, sur le modèle de données. Lorsque vous définissez la propriété HierarchicalDataTemplate.ItemsSource, cette valeur est utilisée lorsque le HierarchicalDataTemplate est appliqué. En utilisant un HierarchicalDataTemplate, vous pouvez définir de manière récursive la propriété ItemsSource pour chaque TreeViewItem dans le TreeView.

Exemple

L'exemple de code suivant montre comment lier un TreeView à des données hiérarchiques et utiliser un HierarchicalDataTemplate pour spécifier la propriété ItemsSource pour chaque TreeViewItem. Le TreeView effectue une liaison à des données XML qui représentent les employés dans une entreprise. Chaque élément Employee peut contenir d'autres éléments Employee pour indiquer les employés subordonnés. Les données étant récursives, le HierarchicalDataTemplate peut être appliqué à chaque niveau.

<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>

Voir aussi

Concepts

Vue d'ensemble de la liaison de données

Vue d'ensemble des modèles de données

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout d'une rubrique

Améliorations apportées aux informations.