Linq查询到treeview HierarchicalDataTemplate

时间:2010-08-30 00:01:41

标签: wpf treeview hierarchicaldatatemplate

首先,抱歉我的英语不好。 我有一个看起来像的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 个答案:

答案 0 :(得分:1)

假设已经构建了树的结构,您只需要在层次结构的第一级中包含根项;所以,例如,你要写treeItems.ItemsSource = itens.Where(i => i.ParentId == null)(可选地后跟ToList())。模板很好。