今回も、前回に引き続きTreeViewコントロールについてみていこうとおもいます。
TreeViewのItemTemplate
TreeViewコントロールもDataGridコントロールと同様にItemsSourceプロパティにコレクションを設定することで、任意の型のコレクションのデータを表示できます。TreeViewコントロールのItemTemplateには、木構造のデータを扱うためにDataTemplateを拡張したHierarchicalDataTemplateを使用します。HierarchicalDataTemplateは、通常のDataTemplateと同様にデータの見た目を定義するために使います。DataTemplateと異なる点は、ItemsSourceプロパティに、現在表示している要素の子にあたるものをItemsSourceプロパティに設定する点です。HierarchicalDataTemplateによるデータの見た目の定義と、ItemsSourceプロパティにもとづいてTreeViewコントロールのTreeViewItemコントロール組み立てられます。
HierarchicalDataTemplateの動作を確認するために、以下のような木構造をもったPersonクラスをTreeViewコントロールに表示してみます。
using System.Collections.Generic; namespace TreeViewSample03 { public class Person { public string Name { get; set; } public List<Person> Children { get; set; } } }
画面に、Personクラスを表示するためのTreeViewコントロールを置きます。
<TreeView Name="treeView"> </TreeView>
画面のコンストラクタで、このTreeViewコントロールのItemsSourceプロパティにPersonクラスのListを設定します。
public MainWindow() { InitializeComponent(); this.treeView.ItemsSource = new List<Person> { new Person { Name = "田中 太郎", Children = new List<Person> { new Person { Name = "田中 花子" }, new Person { Name = "田中 一郎" }, new Person { Name = "木村 貫太郎", Children = new List<Person> { new Person { Name = "木村 はな" }, new Person { Name = "木村 梅" }, } } } }, new Person { Name = "田中 次郎", Children = new List<Person> { new Person { Name = "田中 三郎" } } } }; }
この状態で画面を表示すると、以下のようにPersonクラスをToStringした結果が2つTreeViewコントロールに表示されます
PersonクラスのNameプロパティが表示されるようにTreeViewコントロールのItemTemplateプロパティを設定します。ここでは、HierarchicalDataTemplateを使用していますが、ItemsSourceプロパティにを設定していないので単純にTreeViewコントロールに名前が表示されるだけになります。
xmlns:local="clr-namespace:TreeViewSample03" <TreeView Name="treeView"> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="local:Person"> <TextBlock Text="{Binding Name}" /> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>
MainWindowの属性でxmlnsを使ってPersonクラスのある名前空間をlocalという名前で参照できるようにしてHierarchicalDataTemplateのDataTypeプロパティで、扱う型がPersonクラスであることを指定しています。実行すると以下のような表示になります。
この状態では、ルートの要素しか表示されないのでHierarchicalDataTemplateのItemsSourceプロパティにPersonクラスのChildrenプロパティをバインドします。XAMLを以下に示します。
<TreeView Name="treeView"> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="local:Person" ItemsSource="{Binding Children}"> <TextBlock Text="{Binding Name}" /> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>
この状態で実行するとHierarchicalDataTemplateの定義が再帰的に適用されて以下のように表示されます。
過去記事
- WPF4.5入門 その1 「はじめに」
- WPF4.5入門 その2 「WPFとは」
- WPF4.5入門 その3 「Hello world」
- WPF4.5入門 その4 「Mainメソッドはどこにいった?」
- WPF4.5入門 その5 「全てC#でHello world」
- WPF4.5入門 その6 「WPFを構成するものを考えてみる」
- WPF4.5入門 その7 「XAMLのオブジェクト要素と名前空間」
- WPF4.5入門 その8 「オブジェクト要素のプロパティ」
- WPF4.5入門 その9 「コレクション構文」
- WPF4.5入門 その10 「コンテンツ構文」
- WPF4.5入門 その11 「マークアップ拡張」
- WPF4.5入門 その12 「その他のXAMLの機能」
- WPF4.5入門 その13 「簡単なレイアウトを行うコントロール」
- WPF4.5入門 その14 「レイアウトコントロールのCanvasとStackPanel」
- WPF4.5入門 その15 「レイアウトコントロールのDockPanelとWrapPanel」
- WPF4.5入門 その16 「ViewBoxコントロール」
- WPF4.5入門 その17 「ScrollViewerコントロール」
- WPF4.5入門 その18 「Gridコントロール part 1」
- WPF4.5入門 その19 「Gridコントロール part 2」
- WPF4.5入門 その20 「レイアウトに影響を与えるプロパティ」
- WPF4.5入門 その21 「WPFのコンセプトと重要な機能つまみ食い」
- WPF4.5入門 その22 「Buttonコントロール」
- WPF4.5入門 その23 「DataGridコントロール その1」
- WPF4.5入門 その24 「DataGridコントロール その2」
- WPF4.5入門 その25 「TreeViewコントロール その1」