興味深い質問です。確認したところ、ネイティブ WP8 にはHierarchicalDataTemplateはありませんが、WPToolkit にはあります。ソース コードを確認した後、それは ExpanderView と MenuItem の親であるHeaderedItemsControlでのみ使用されます。
興味深いことに、HierarchicalDataTemplateのプロパティItemsSource、ItemTemplate、およびItemContainerStyleは DependencyProperties でさえなく、どの WPToolkit サンプルでも割り当てられていません。この HierarchicalDataTemplate が再帰的なデータ構造の作成に実際に使用できるかどうかはわかりません。
しかし気にしないでください。ネイティブの WP8 クラスだけを使用して、独自の再帰的データ構造を構築することは完全に可能です。
ノードのコレクションを持つ単純な再帰クラス Node と MainViewModel を用意しましょう。
public class Node
{
public string Title { get; set; }
public ObservableCollection<Node> Children { get; set; }
}
public class MainViewModel
{
public ObservableCollection<Node> Nodes { get; set; }
public MainViewModel()
{
Nodes = ... // load the structure here
}
}
ノードを再帰的に表示するための UserControl と MainPage のコードを作成しましょう。
<UserControl x:Class="WP8.HierarchicalDataTemplate.NodeUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:h="clr-namespace:WP8.HierarchicalDataTemplate">
<Border BorderThickness="1" BorderBrush="Red">
<StackPanel d:DataContext="{d:DesignInstance h:Node}" Margin="15">
<TextBlock Text="{Binding Title}" />
<ItemsControl ItemsSource="{Binding Children}"
ItemTemplate="{StaticResource NodeNestedTemplate}" />
</StackPanel>
</Border>
</UserControl>
<!-- on MainPage as root object -->
<Grid>
<ItemsControl Margin="20"
ItemsSource="{Binding Nodes, Source={StaticResource model}}"
ItemTemplate="{StaticResource NodeNestedTemplate}" />
</Grid>
NodeUserControl と NodeNestedTemplate という名前のMainPage DataTemplate の両方で使用したことに注意してください。そのように再帰的な DataTemplate を定義することはできませんが、この DataTemplate を使用し、この DataTemplate 内に配置される UserControl を作成することはできます。これは App.xaml のグローバル リソースにあります。
...
xmlns:h="clr-namespace:WP8.HierarchicalDataTemplate">
<Application.Resources>
<h:MainViewModel x:Key="model"/>
<DataTemplate x:Key="NodeNestedTemplate">
<h:NodeUserControl />
</DataTemplate>
</Application.Resources>
...
そしてそれだけです!以下は、3 レベルの再帰でデータ ソースを使用する場合のソリューションの小さなスクリーンショットです: http://i.stack.imgur.com/zqOYe.png
ツリー構造の実装に役立つことを願っています!