8

ParentプロパティとChildrenプロパティを持つクラスがあります。

ADO.NETEntityFramework階層ページクラスhttp://img148.imageshack.us/img148/6802/edmxxe8.gif

この階層をWPFツリービューで表示したいと思います。

これが私のXAMLです...

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=ShortTitle}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

そして私のVBコード...

Dim db As New PageEntities
Dim t = From p In db.Page.Include( "Children")_
        p.Parentは何もない_
        pを選択
TreeViewPages.ItemsSource = t

しかし、それから私は2レベルの深さの木しか得られません。これを機能させるには何をする必要がありますか?

4

1 に答える 1

11

これが機能しない理由は、TreeView の DataTemplate のみを指定しているためです。生成される TreeViewItems も ItemsControls であるため、ItemTemplate も設定する必要があります。

目的を達成する最も簡単な方法は、HierarchicalDataTemplate を TreeView (またはその親ビジュアルのいずれか) のリソースに配置し、HierarchicalDataTemplate の DataType を設定して、すべてのアイテムに適用されるようにすることです。

コンテナーの宣言 (ほとんどの場合、ウィンドウ) で、ページが定義されている名前空間へのマッピングを定義する必要があります。

例えば

<Window ...
    xmlns:local="clr-namespace:NamespaceOfPageClass;assembly=AssemblyWherePageIsDefined">

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}" />
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType=”{x:Type local:Page}” ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=ShortTitle}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>
于 2008-11-07T17:57:46.507 に答える