Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Pode haver momentos em que você deseja associar uma TreeView a uma fonte de dados cuja profundidade não é conhecida. Isso pode ocorrer quando os dados são recursivos por natureza, como um sistema de arquivos, em que as pastas podem conter pastas ou a estrutura organizacional de uma empresa, em que os funcionários têm outros funcionários como relatórios diretos.
A fonte de dados deve ter um modelo de objeto hierárquico. Por exemplo, uma classe Employee pode conter uma coleção de objetos Funcionários que são subordinados diretos de um funcionário. Se os dados forem representados de uma forma que não seja hierárquica, você deverá criar uma representação hierárquica dos dados.
Quando você define a propriedade ItemsControl.ItemTemplate e se o ItemsControl gera um ItemsControl para cada item filho, o ItemsControl filho usa o mesmo ItemTemplate que o pai. Por exemplo, se você definir a propriedade ItemTemplate em um TreeViewassociado a dados, cada TreeViewItem gerada usará o DataTemplate atribuído à propriedade ItemTemplate do TreeView.
O HierarchicalDataTemplate permite que você especifique o ItemsSource para um TreeViewItem, ou qualquer HeaderedItemsControl, no modelo de dados. Quando você define a propriedade HierarchicalDataTemplate.ItemsSource, esse valor é usado quando o HierarchicalDataTemplate é aplicado. Usando um HierarchicalDataTemplate, você pode definir recursivamente o ItemsSource para cada TreeViewItem no TreeView.
Exemplo
O exemplo a seguir demonstra como associar um TreeView a dados hierárquicos e usar um HierarchicalDataTemplate para especificar o ItemsSource para cada TreeViewItem. O TreeView associa-se a dados XML que representam os funcionários de uma empresa. Cada elemento Employee pode conter outros elementos Employee para indicar quem relata a quem. Como os dados são recursivos, o HierarchicalDataTemplate pode ser aplicado a cada nível.
<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>
Consulte também
- Visão Geral do Data Binding
- Visão geral de modelagem dos dados
.NET Desktop feedback