方法: 深度がわからないデータに TreeView をバインドする
深さがわからないデータ ソースに TreeView をバインドすることが必要な場合があります。 これは、本質的にデータが再帰的な場合に起こります。たとえば、フォルダーにフォルダーを格納できるファイル システム、従業員が他の従業員を直属の部下とする会社の組織構造などがそうです。
データ ソースには、階層オブジェクト モデルが必要です。 たとえば、Employee
クラスには、ある従業員の直属の部下である Employee オブジェクトのコレクションが含まれていることがあります。 データが階層化されていない方法で表されている場合は、データの階層表現を作成する必要があります。
ItemsControl.ItemTemplate プロパティを設定すると、ItemsControl によって各子項目の ItemsControl が生成される場合に、子 ItemsControl では親と同じ ItemTemplate が使用されます。 たとえば、データ バインド TreeView の ItemTemplate プロパティを設定する場合、生成される各 TreeViewItem では、TreeView の ItemTemplate プロパティに割り当てられた DataTemplate が使用されます。
HierarchicalDataTemplate を使用すると、データ テンプレートで TreeViewItem の ItemsSource、またはいずれかの HeaderedItemsControl を指定できます。 HierarchicalDataTemplate.ItemsSource プロパティを設定すると、HierarchicalDataTemplate が適用される場合に、その値が使用されます。 HierarchicalDataTemplate を使用することで、TreeView 内の各 TreeViewItem の ItemsSource を再帰的に設定できます。
例
次の例では、TreeView を階層データにバインドし、HierarchicalDataTemplate を使用して各 TreeViewItem の ItemsSource を指定する方法を示します。 TreeView は、会社の従業員を表す XML データにバインドされます。 各 Employee
要素には、上司と部下を示す他の Employee
要素を含めることができます。 データが再帰的であるため、HierarchicalDataTemplate は各レベルに適用できます。
<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>
関連項目
.NET Desktop feedback
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示