2010-08-30 22 views
0

Tout d'abord, désolé pour mon mauvais anglais. J'ai une entité EF qui ressemble à:requête Linq à treeview HierarchicalDataTemplate

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

Maintenant, je veux charger les données de cette entité sur une ... TreeView le mieux que je pouvais obtenir est le suivi XAML:

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

et charger les données avec

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

cette affiche évidemment les données sur la TreeView comme ceci:

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

Comment puis-je modifier (ou réécrire) mon code afin que l'arborescence affiche les données de manière hiérarchique, sans les nœuds répétés?

Répondre

1

En supposant que la structure de l'arborescence est déjà construite, vous devez uniquement inclure les éléments racine dans le premier niveau de la hiérarchie; Par exemple, vous écririez treeItems.ItemsSource = itens.Where(i => i.ParentId == null) (éventuellement suivi de ToList()). Le modèle est bien.

+0

wow ... c'est tellement évident:/... au début je pensais que la clause where ne chargerait pas les non-null itens ... pensant trop dans SQL/Winform et peu dans EF/WPF je suppose. .. Merci de votre aide :) – Leo