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