Jak: Propojit TreeView s daty, která mají neurčitelnou hloubku
Někdy může docházet k tomu, že budete chtít vytvořit vazbu TreeView ke zdroji dat, jehož hloubka není známá. K tomu může dojít, když jsou data rekurzivní povahy, například v systému souborů, kde složky můžou obsahovat jiné složky, nebo v organizační struktuře společnosti, kde zaměstnanci mají jako přímé podřízené další zaměstnance.
Zdroj dat musí mít hierarchický objektový model. Například třída Employee
může obsahovat kolekci objektů Employee, které jsou přímí podřízení zaměstnance. Pokud jsou data reprezentována způsobem, který není hierarchický, je nutné vytvořit hierarchickou reprezentaci dat.
Když nastavíte vlastnost ItemsControl.ItemTemplate a ItemsControl vygeneruje ItemsControl pro každou podřízenou položku, pak podřízená položka ItemsControl používá stejnou ItemTemplate jako nadřazená položka. Pokud například nastavíte vlastnost ItemTemplate u TreeViewvázaného na data , každý TreeViewItem, který je vygenerován, používá DataTemplate, který byl přiřazen k vlastnosti ItemTemplateTreeView.
HierarchicalDataTemplate umožňuje zadat ItemsSource pro TreeViewItemnebo jakoukoli HeaderedItemsControlv šabloně dat. Když nastavíte vlastnost HierarchicalDataTemplate.ItemsSource, použije se tato hodnota při použití HierarchicalDataTemplate. Pomocí HierarchicalDataTemplatemůžete rekurzivně nastavit ItemsSource pro každý TreeViewItem v TreeView.
Příklad
Následující příklad ukazuje, jak vytvořit vazbu TreeView na hierarchická data a pomocí HierarchicalDataTemplate určit ItemsSource pro každý TreeViewItem.
TreeView vytvoří vazbu na data XML, která představují zaměstnance ve společnosti. Každý prvek Employee
může obsahovat další prvky Employee
, které označují, kdo ho hlásí. Vzhledem k tomu, že data jsou rekurzivní, lze HierarchicalDataTemplate použít na každou úroveň.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<XmlDataProvider x:Key="myCompany" XPath="Company/Employee">
<x:XData>
<Company xmlns="">
<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>
Viz také
- Přehled datových vazeb
- Přehled šablon dat
.NET Desktop feedback