IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Construire un treeview avec des données Entity Framework (MVVM)


Sujet :

Silverlight

  1. #1
    Membre régulier
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 103
    Points
    103
    Par défaut Construire un treeview avec des données Entity Framework (MVVM)
    Bonjour à tous,

    je souhaite récupérer des données depuis ma BD (via EF) afin de les binder sur un treeview.

    J'ai beau chercher sur le net, il s'agit plus ou moins de boucles (pas très élégant) alors que je pense qu'on doit pouvoir utiliser linq (include) pour celà.

    Mais voilà, je n'ai rien trouvé de concluant (j'ai bien trouvé des pistes mais je ne m'en sort pas ... depuis ce matin 7h ... quand même ...)

    Si on prend comme exemple deux tables "Famille"(id, nom) et "Enfant"(id, prenom, id.Famille) avec la relation qui va bien.

    Comment puis-je récupérer tout celà pour l'intégrer à l'itemsource de mon treeview ? Et surtout, à quel endroit je place cet include ??

    J'ai essayé dans le load (mais il n'en veut pas) ... bon c'est plutôt logique ) Du coup j'ai essayé dans le domainService

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public IQueryable<Famille> GetFamille()
            {
                return this.ObjectContext.Famille
                    .Include("Enfant.Prenom");
            }
    Bon, j'imagine que je vais obtenir un résultat. Mais je ne vois pas comment je pourrai binder le selectedItem de l'enfant par la suite (sur quoi va-t-il se référer puisqu'on ne lui donne que le prénom ??).

    Et je me rends compte, du coup, que je n'ai peut-être pas posté au bon endroit ...

    Merci d'avance,
    Frédéric

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Si tu veux afficher dans un treeview, voila la base :

    domainService .cs
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public IQueryable<Famille> GetFamille()
            {
                return this.ObjectContext.Famille.Include("Enfant");
            }

    Pour qu'il ramène la table enfant. Mais ce n'est pas suffisant, il faut aussi ajouter un include dans le fichier Domainservice.metadata.cs:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     internal sealed class FamilleMetadata
            {
     
                // Metadata classes are not meant to be instantiated.
                private FamilleMetadata()
                {
                }
                [Include]
                public EntityCollection<Enfant> Enfant { get; set; }
     
                public int ID { get; set; }
     
                public string Nom { get; set; }
            }
    Dans ma classe FamilleMetadata, j'ai ajouté l'attribut Include. Sans ça, il ne ramènera pas les enfants du côté client.

    En XAML :
    Code Xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     <UserControl.Resources>
            <sdk:HierarchicalDataTemplate x:Key="EnfantTemplate">
                <TextBlock FontStyle="Italic"
                           Text="{Binding Path=Prenom}" />
            </sdk:HierarchicalDataTemplate>
            <sdk:HierarchicalDataTemplate x:Key="FamilleTemplate"
                                          ItemsSource="{Binding Path=Enfant}"
                                          ItemTemplate="{StaticResource EnfantTemplate}">
                <TextBlock Text="{Binding Path=Nom}"
                           FontWeight="Bold" />
            </sdk:HierarchicalDataTemplate>
        </UserControl.Resources>
     
        <Grid x:Name="LayoutRoot">
     
            <sdk:TreeView x:Name="treeview"
                          ItemTemplate="{StaticResource FamilleTemplate}" />
     
        </Grid>

    Il ne reste plus qu'a binder dans ton code le résultat de la requête dans le treeview. Exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     var domainService1 = new DomainService1();
     
                domainService1.Load(domainService1.GetFamilleWithEnfantsQuery(), (lo) =>
                              {
                                  treeview.ItemsSource = lo.Entities;
                                  return;
                              },null);
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre régulier
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Points : 103
    Points
    103
    Par défaut
    Un GRAND merci à toi Olivier

    Je vais (enfin) pouvoir débloquer la chose.
    Je savais bien qu'un truc clochait pour ramener les Enfants côté client mais je ne voyais pas où.

    Merci pour votre disponibilité à tous ... Grâce à vous, ça rentre !



    Frédéric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2013, 12h26
  2. Réponses: 5
    Dernier message: 02/07/2012, 09h12
  3. [VBA-A]Remplir une textbox avec des données de tables.
    Par cuicui08 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2006, 10h28
  4. [datagrid]lier avec des données
    Par Alex35 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 11/12/2005, 10h10
  5. Créer du xml avec des données Oracle
    Par Baumont dans le forum Oracle
    Réponses: 3
    Dernier message: 23/11/2005, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo