WPFツリービューバインディング

.net data-binding entity-framework linq wpf

質問

私はParentとChildrenのプロパティを持つクラスを持っています。

ADO.NETエンティティフレームワーク階層ページクラス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") _
        Where p.Parent Is Nothing _
        Select p
TreeViewPages.ItemsSource = t

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

受け入れられた回答

これが機能しない理由は、TreeViewにDataTemplateを指定しているだけだからです。生成するTreeViewItemもItemsControlなので、ItemTemplateも設定する必要があります。

あなたが望んでいることを達成する最も簡単な方法はTreeView(またはその親ビジュアルのいずれか)のリソースにHierarchicalDataTemplateを入れて、それがあなたのすべてのアイテムに適用されるように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>


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ