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

Windows Presentation Foundation Discussion :

Chargement d'un objet observableCollection


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut Chargement d'un objet observableCollection
    Bonjour,
    ma question est relativement simple peut-on charger un observableCollection via un XmlDataProvider et si oui commet car je n'ai pas la propriété source dans observableCollection
    En effet j'aimerais utiliser les avantages de ces deux classes
    Par avance merci

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu veux remplir une ObservableCollection à partir de ton XmlDataProvider ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    oui,
    si j'ai bien compris xmldataprovider remonte une collections d'objets de type nodes et j'ai besoin d'utiliser ces objets sans passer par un control d'où mon hypothèse d'utiliser un obervablecollection

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Dans ce cas pourquoi utiliser un XmlDataProvider ? Tu peux directement lire le fichier XML avec Linq to XML, XmlReader ou XmlDocument, et créer ta collection à partir de là.

    Exemple avec Linq to XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    XDocument doc = XDocument.Load("persons.xml");
    var query = from node in doc.Root.Elements("Person")
                select new Person
                {
                    Id = int.Parse(node.Attribute("Id").Value),
                    LastName = node.Element("LastName").Value,
                    FirstName = node.Element("FirstName").Value,
                    DateOfBirth = DateTime.Parse(node.Element("DateOfBirth").Value)
                };
    var collection = new ObservableCollection<Person>(query);

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    merci pour ta réponse qui me convint
    par contre avant de clore le sujet j'aimerai avoir une réponse sur le point suivant qui est toujours en ralation avec xmldatprovider
    j'ai désiré récupérer la collections des "nodes " sousjacente à l'instruction; pour ce faire j'ai utilisé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    XmlDataProvider provider = new XmlDataProvider();
                provider.Source = new Uri("http://www.microsoft.com/feeds/msdn/fr-fr/vbasic/rss.xml");
                provider.XPath = "rss";
                XmlNodeList list = (XmlNodeList)provider.Data;
                if (list == null)
                    {
                    tbx.Text = "vide";
                    }
                }l
    lorsque j'ai programmé ces lignes visual express ne m'a signalé aucune erreur Par contre l'objet obtenu est vide alors que lorsque je charge dans une listbox via "itemsource "j'ai bien des éléments qui apparaissent

    Avez-vous une explication ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le chargement des données n'est pas instantané, et se fait de façon asynchrone. Quand tu viens d'affecter une source à ton XmlDataProvider, les données ne sont pas encore chargées, et provider.Data vaut donc null. Tu peux gérer l'évènement DataChanged pour être notifié quand les données sont chargées.

    D'autre part, la propriété Data n'est pas de type XmlNodeList, c'est une instance de XmlDataCollection, une classe interne du framework qui est une collection de noeuds.


    Code : 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
                XmlDataProvider provider = new XmlDataProvider();
                provider.DataChanged += new EventHandler(provider_DataChanged);
                provider.Source = new Uri("http://www.microsoft.com/feeds/msdn/fr-fr/vbasic/rss.xml");
                provider.XPath = "rss";
     
    ...
     
            void provider_DataChanged(object sender, EventArgs e)
            {
                XmlDataProvider provider = sender as XmlDataProvider;
                IList<XmlNode> nodes = provider.Data as IList<XmlNode>;
                foreach(var n in nodes)
                {
                     ...
                }
            }
    Sinon tu peux aussi utiliser la propriété Document du XmlDataProvider, qui renvoie un XmlDocument

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    encore merci pour cette réponse particulièrement claire et complète

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    pense à marquer le sujet comme alors

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

Discussions similaires

  1. OpenGL ES : chargement / déchargement d'objet
    Par UbuntuMan dans le forum Android
    Réponses: 1
    Dernier message: 18/04/2014, 09h43
  2. Réponses: 6
    Dernier message: 18/06/2010, 14h47
  3. erreur chargement js & déclaration objet
    Par Kywhod dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 16/05/2008, 19h11
  4. [FlashMX] chargement dynamique d'objets
    Par shaftJackson dans le forum Flash
    Réponses: 4
    Dernier message: 17/04/2007, 15h40
  5. [Hibernate] Chargement d'un objet avec XX sous niveau ?
    Par Hikage dans le forum Hibernate
    Réponses: 2
    Dernier message: 27/07/2006, 18h14

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