0

まず、私の下手な英語で申し訳ありません。次のようなEFエンティティがあります。

class Item
{    
    public Guid Id { get; set; }
    public string Title{ get; set; }
    public Guid? ParentId { get; set; }
    public ICollection<Item> Items { get; set; }    
}

今、ツリービューでそのエンティティからデータをロードしたい...私が得ることができる最高のものは、次のxamlです:

<TreeView Name="treeItems">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:Item}" ItemsSource="{Binding Items}">
            <TextBlock  Text="{Binding Path=Title}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

データをロードします

var itens = from it in ctx.Item select it;
treeItems.ItemsSource = itens;

これにより、明らかに次のようにツリービューにデータが表示されます。

アイテムA
  アイテムA1
  アイテムA2
ItemA1 -- 繰り返されるノード
ItemA2 -- 繰り返されるノード

ノードを繰り返さずに、ツリービューにデータが階層的に表示されるように、コードを微調整 (または書き換え) するにはどうすればよいですか?

4

1 に答える 1

1

ツリーの構造が既に構築されていると仮定すると、階層の最初のレベルにルート項目を含めるだけで済みます。たとえば、次のように記述しますtreeItems.ItemsSource = itens.Where(i => i.ParentId == null)(オプションで ToList() が続きます)。テンプレートは問題ありません。

于 2010-08-30T07:38:28.310 に答える