代码之家  ›  专栏  ›  技术社区  ›  Leo

Linq查询到TreeView HierarchicalDataTemplate

  •  0
  • Leo  · 技术社区  · 16 年前

    首先,为我糟糕的英语感到抱歉。 我有一个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;
    

    这显然会像这样显示TreeView上的数据:

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

    如何调整(或重写)代码,使TreeView以分层方式显示数据,而不重复节点?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Alex Paven    16 年前

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