2010-08-30 63 views
0

首先,對不起我的英語不好。 我有一個看起來像一個EF實體:Linq查詢樹視圖HierarchicalDataTemplate

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

現在我想上加載一個TreeView從實體的數據...我能得到最好的是後續的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

假設樹的結構已經建好,您只需要將根項目包括在層次結構的第一層;因此,例如,您可以編寫treeItems.ItemsSource = itens.Where(i => i.ParentId == null)(可以選擇跟着ToList())。模板很好。

+0

哇......這是如此的明顯:/ ...起初我認爲where子句不會加載非null itens ...在SQL/Winform中思考太多,而在EF/WPF中我覺得很少。 .. 感謝您的幫助 :) – Leo 2010-08-30 12:57:19