3

Windows Phone Toolkit にはHierarchicalDataTemplate. ツリー構造を構築したいので、それは私にとっては良いことです。

HierarchicalDataTemplateがWPFにも含まれていることがわかりました。これにより、次の記事を使用するようになりました: TreeView、HierarchicalDataTemplate、および再帰データ

TargetTypeデータ テンプレートにを設定する必要があると記載されています。しかし、HierarchicalDataTemplateWindows Phone Toolkit の にはそのプロパティがありません。

さらに、コントロールHierarchicalDataTemplateもないように見えるので、何のためにあるのか疑問に思っています。TreeView

4

1 に答える 1

6

興味深い質問です。確認したところ、ネイティブ WP8 にはHierarchicalDataTemplateはありませんが、WPToolkit にはあります。ソース コードを確認した後、それは ExpanderView と MenuItem の親であるHeaderedItemsControlでのみ使用されます。
興味深いことに、HierarchicalDataTemplateのプロパティItemsSourceItemTemplate、および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

ツリー構造の実装に役立つことを願っています!

于 2013-11-09T16:55:36.703 に答える