2012-02-28 3 views
3

Je suis nouveau sur WPF et EF; J'ai regardé mais je n'ai pas pu trouver l'aide appropriée.Reliure TreeView et Entity Framework


C'est ce que j'ai:

Entity Framework (ReportDefinition.ParentID et ReportDefinition.SectionID sont Section.idSections), exemple de ReportDefinition et Section exemple .

C'est ce que je voudrais présenter:

TreeView.

Diagram Picture.


J'essaye d'accomplir ceci par programme. J'apprécierais beaucoup toute aide.

Répondre

3

Vous avez besoin d'une collection de haut niveau ReportDefinition objets:

TopLevelReportDefinitions = ReportDefinitions.Where(rd => rd.ParentID == 0) 

Vous devez lier cette collection à la ItemsSource du TreeView.

Dans EF, vous devez également créer une relation parent-enfant sur ReportDefinition en reliant les enfants au parent en utilisant ParentID. Pour plus de commodité, vous pouvez nommer la collection inverse Children. La collection d'objets ReportDefinition directement sous une autre ReportDefinition est alors la collection:

ReportDefinition.Children 

Vous devez alors créer HierarchicalTemplate dans le TreeView:

<TreeView ItemsSource="{Binding TopLevelReportDefinitions}"> 
    <TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
     <TextBlock Text="{Binding Name}"/> 
    </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 
+0

Merci pour la réponse, Martin. Voici ce que j'ai fait: 'using (var context = new reportEntities (entitéConnexionChaîne)) {var TopLevelReportDefinitions = context.ReportDefinitions.Where (rd => rd.ParentID == 0); tvReport.ItemsSource = TopLevelReportDefinitions.ToList(); } 'J'ai également ajouté le modèle suggéré à TreeView. Malheureusement, je ne suis pas capable de comprendre comment créer la relation parent-enfant. Pouvez-vous m'aider avec ça? – Yeseanul

+0

@Yeseanul: Une option consiste à créer la relation dans la base de données (une clé étrangère de ParentID à idReportDefinition). Ensuite, si vous mettez à jour votre modèle à partir de la base de données, j'attendrais que EF crée des propriétés pour la relation dans le modèle. Les noms ne seront pas 'Parent' et' Children' mais vous pouvez les renommer. –

+0

Je l'ai fait juste (ajouté une clé étrangère dans la base de données et mis à jour le modèle) mais sans succès. J'ai fini par étendre la classe partielle public ReportDefinition: EntityObject que EF a créée; donc j'ai ajouté une propriété 'public IList

GetChildren'. J'ai également modifié le modèle en conséquence ''. Cette approche fournit des résultats: le TreeView montre seulement les enfants mais ne montre pas les parents. Un autre problème est que cela ne montre pas Grand-Enfants, Grand-Grand-Enfants ... Des pensées à ce sujet? – Yeseanul