Gewusst wie: Binden einer TreeView an Daten mit nicht bestimmbarer Tiefe
Aktualisiert: Juli 2008
In einigen Fällen müssen Sie möglicherweise eine TreeView an eine Datenquelle mit unbekannter Tiefe binden. Dies ist z. B. der Fall, wenn Daten rekursiv sind, wie bei Dateisystemen mit Ordnern und Unterordnern oder bei der Organisationsstruktur eines Unternehmens mit Mitarbeitern und direkten Vorgesetzten.
Die Datenquelle muss ein hierarchisches Objektmodell aufweisen. Beispiel: Eine Employee-Klasse enthält eine Auflistung von Employee-Objekten, bei denen es sich um die direkten Vorgesetzten eines Mitarbeiters handelt. Wenn die Daten nicht hierarchisch dargestellt werden, müssen Sie eine hierarchische Darstellung der Daten erstellen.
Wenn Sie die ItemsControl.ItemTemplate-Eigenschaft festlegen und das ItemsControl ein ItemsControl für jedes untergeordnete Element generiert, wird für das untergeordnete ItemsControl dieselbe ItemTemplate verwendet wie für das übergeordnete Element. Wenn Sie z. B. die ItemTemplate-Eigenschaft für eine datengebundene TreeView festlegen, verwendet jedes generierte TreeViewItem die DataTemplate, die der ItemTemplate-Eigenschaft der TreeView zugewiesen wurde.
Die HierarchicalDataTemplate ermöglicht Ihnen, die ItemsSource für ein TreeViewItem oder ein beliebiges HeaderedItemsControl in der Datenvorlage anzugeben. Wenn Sie die HierarchicalDataTemplate.ItemsSource-Eigenschaft festlegen, wird dieser Wert bei Anwendung der HierarchicalDataTemplate verwendet. Indem Sie eine HierarchicalDataTemplate verwenden, können Sie die ItemsSource für jedes TreeViewItem in der TreeView rekursiv festlegen.
Beispiel
Das folgende Beispiel zeigt, wie Sie eine TreeView an hierarchische Daten binden und mit einer HierarchicalDataTemplate die ItemsSource für jedes TreeViewItem angeben. Die TreeView wird an XML-Daten gebunden, die die Mitarbeiter in einem Unternehmen darstellen. Jedes Employee-Element kann weitere Employee-Elemente enthalten, um die hierarchischen Strukturen im Unternehmen wiederzugeben. Da die Daten rekursiv sind, kann die HierarchicalDataTemplate auf jede Ebene angewendet werden.
<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>
Siehe auch
Konzepte
Änderungsprotokoll
Datum |
Versionsgeschichte |
Grund |
---|---|---|
Juli 2008 |
Thema hinzugefügt. |
Informationsergänzung. |