Linq-запрос к древовидной структуре HierarchicalDataTemplate - PullRequest
0 голосов
/ 30 августа 2010

Во-первых, извините за мой плохой английский.У меня есть объект 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;

Очевидно, что данные в древовидном представлении отображаются следующим образом:

ItemA
  ItemA1
  ItemA2
ItemA1 --repeated node
ItemA2 --repeated node

Как я могу настроить (или переписать) свой код, чтобы древовидное представлениеотображает данные в иерархическом порядке, без повторяющихся узлов?

1 Ответ

1 голос
/ 30 августа 2010

Предполагая, что структура дерева уже построена, вам нужно только включить корневые элементы в первый уровень иерархии;так, например, вы бы написали treeItems.ItemsSource = itens.Where(i => i.ParentId == null) (за которым может следовать ToList ()).Шаблон в порядке.

...