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 :

listView+Bind avec ObservableCollection, indispensable ?


Sujet :

Windows Presentation Foundation

  1. #21
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    ca commence de se mettre en place merci pour votre aide.

    j'arrive à créer le XML suivant

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <ArrayOfPersonName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <PersonName>
        <FirserwwtName>Willa</FirserwwtName>
        <LastName>Cather</LastName>
      </PersonName>
      <PersonName>
        <FirserwwtName>Isak</FirserwwtName>
        <LastName>Dinesen</LastName>
      </PersonName>
      <PersonName>
        <FirserwwtName>Victor</FirserwwtName>
        <LastName>Hugo</LastName>
      </PersonName>
      <PersonName>
        <FirserwwtName>Jules</FirserwwtName>
        <LastName>Verne</LastName>
      </PersonName>
      <PersonName>
        <FirserwwtName>t</FirserwwtName>
        <LastName>t2</LastName>
      </PersonName>
      <PersonName>
        <FirserwwtName>t3</FirserwwtName>
        <LastName>t4</LastName>
      </PersonName>
    </ArrayOfPersonName>

    Comment renommer le ArrayOfPersonName ??? J'ai testé XMLRoot, Attribute, Array, ArrayItem, mais cela ne change rien...

  2. #22
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    J'aurais justement dit XMLRoot . Tu l'as utilisé comme ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [XmlRoot("MonNouveauNom")]
    public class ArrayOfPersonName {
     
    }

  3. #23
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    en fait je n'ai pas de classes intitulées ArrayOfPersonName

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    [XmlRoot("PersonName")]
        public class Person
        {
            private string firstName;
            private string LastName;
     
            public Person()
            {
     
            }
     
            public Person(string firstName, string lastName)
            {
                this.firstName = firstName;
                this.lastName = lastName;
            }
            [XmlElement("FirstName")] 
            public string FirstName
            {
                get { return firstName; }
                set { firstName = value; }
            }
            [XmlElement("LastName)] 
            public string LastName
            {
                get { return lastName; }
                set { lastName = value; }
            }
        }

    Ma méthode de Sérialization

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    private void toXML()
            {
     
     
                Person p = new Person
                {
     
                    FirstName = "ewr",
                    LastName = "General Infos"
                };
     
                Person p2 = new Person
                {
     
                    FirstName= "20",
                    LastName = "Hello world"
                };
     
     
                PersonCollection t = new  PersonCollection {p, p2 };
     
     
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(PersonCollection));
                using (StreamWriter streamWriter = new StreamWriter("C:\\test.xml"))
                {
                    xmlSerializer.Serialize(streamWriter, t);
                }
            }

  4. #24
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    quand le nom du noeud xml est le même que la propriété pas besoin de le rajouter comme tu le fait pour [XmlElement("FirstName")]
    sinon avec netreflector ou dans la doc tu regarde ce qui etant la classe attribute
    et tu cherche les attribute commencant par xml
    n'oubli pas que XmlElement c'est la classe XmlElementAttribute et qu'elle derrive de System.Attribute
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  5. #25
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    merci pour l'info, je suis en train de tester donc je touche 1 peu à tout

  6. #26
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    je viens de modifier mon message
    cherche dans la doc la classe attribute
    regarde les classe derrive et regarde la doc de tt celles qui commencent par xml y'en a des sympa

    par exemple l'attribut [DefaultValue("")] est sympa car si la veulr de ta propriete est la meme que la valeur apr defaut il ne la serialize pas (sympa)

    dans tous les cas jete un coup d'oeil sur les attributs y'en a qui sont vraiment pratiques
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  7. #27
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    pour info voici les attribut xml simples
    System.Xml.Serialization..::.XmlAnyAttributeAttribute
    System.Xml.Serialization..::.XmlAnyElementAttribute
    System.Xml.Serialization..::.XmlArrayAttribute
    System.Xml.Serialization..::.XmlArrayItemAttribute
    System.Xml.Serialization..::.XmlAttributeAttribute
    System.Xml.Serialization..::.XmlChoiceIdentifierAttribute
    System.Xml.Serialization..::.XmlElementAttribute
    System.Xml.Serialization..::.XmlEnumAttribute
    System.Xml.Serialization..::.XmlIgnoreAttribute
    System.Xml.Serialization..::.XmlIncludeAttribute
    System.Xml.Serialization..::.XmlNamespaceDeclarationsAttribute
    System.Xml.Serialization..::.XmlRootAttribute
    System.Xml.Serialization..::.XmlSchemaProviderAttribute
    System.Xml.Serialization..::.XmlSerializerAssemblyAttribute
    System.Xml.Serialization..::.XmlSerializerVersionAttribute
    System.Xml.Serialization..::.XmlTextAttribute
    System.Xml.Serialization..::.XmlTypeAttribute
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  8. #28
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par Bindy
    en fait je n'ai pas de classes intitulées ArrayOfPersonName
    Chez toi elle s'appelle PersonCollection, si je comprend bien ton code :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    PersonCollection t = new  PersonCollection {p, p2 };

    A toi de mettre l'attribut sur ta classe PersonCollection, non ?

  9. #29
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    PersonCollection est mon observableCollection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public class PersonCollection : ObservableCollection<Person>
        {
            public PersonkCollection()
                : base()
            {
                Add(new Track("Willa", "Cather"));
                Add(new Track("Isak", "Dinesen"));
                Add(new Track("Victor", "Hugo"));
                Add(new Track("Jules", "Verne"));
            }
        }

  10. #30
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Et donc en mettant cet attribut [XmlRoot("PersonName")], qu'est-ce que ça donne :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      [XmlRoot("PersonName")]
     public class PersonCollection : ObservableCollection<Person>
        {
            public PersonkCollection()
                : base()
            {
                Add(new Track("Willa", "Cather"));
                Add(new Track("Isak", "Dinesen"));
                Add(new Track("Victor", "Hugo"));
                Add(new Track("Jules", "Verne"));
            }
        }

  11. #31
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    quelquechose m'échappe lors de la Déserialization, avec la classe Person et l'observable Collection,

    le code suivant (inspiré de ikeas )

    me fait 1 plantée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void fromXML()
            {
                XmlSerializer xs = new XmlSerializer(typeof(Person));
                using (StreamReader rd = new StreamReader("C:\\test.xml"))
                {
                    
                    Person reprise = xs.Deserialize(rd) as Person;
                    Console.WriteLine("Id : {0}", reprise.FirstName);
                    Console.WriteLine("Title : {0} ", reprise.LastName);
                
                  }
            }
    en me disant que la variable reprise est à nulle...

    erreur exacte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"Cannot create instance of 'Window1' defined in assembly 'WpfInternetUploadManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation."}
    j'avais déjà testé cette méthode sans changer le code (sauf les paramètres variables bien sûr) et j'arrivais à lire mon XML (qui est bien OK, j'ai vérifié)...

    D'où l'erreur peut-elle provenir ?

  12. #32
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par binoo Voir le message
    Et donc en mettant cet attribut [XmlRoot("PersonName")], qu'est-ce que ça donne :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      [XmlRoot("PersonName")]
     public class PersonCollection : ObservableCollection<Person>
        {
            public PersonkCollection()
                : base()
            {
                Add(new Track("Willa", "Cather"));
                Add(new Track("Isak", "Dinesen"));
                Add(new Track("Victor", "Hugo"));
                Add(new Track("Jules", "Verne"));
            }
        }
    oui avec ton code c'est tout bon, on obtient le XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <PersonName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Person>
        <FirstName>Willa</FirstName>
        <LastName>Cather</LastName>
      </Person>
    </PersonName>
    il faut bien mettre le XMLRoot sur la Collection et non pas sur la classe Person

  13. #33
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    problème corrigé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void fromXML()
            {
                XmlSerializer xs = new XmlSerializer(typeof(Personollection));
                using (StreamReader rd = new StreamReader("C:\\test.xml"))
                {
     
                    PersonCollection reprise = xs.Deserialize(rd) as PersonCollection;
     
                    foreach (Person t in reprise)
                    {
                        Console.WriteLine(t.FirstName);
                    }

  14. #34
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Ok, cool. Ça devrait être plus simple désormais pour les insert, update et compagnie

  15. #35
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    oh oui, inestimable!

    merci encore

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/05/2010, 17h28
  2. Probleme de binding avec une observableCollection
    Par Yogy dans le forum Silverlight
    Réponses: 4
    Dernier message: 10/06/2009, 18h50
  3. [ListView bindée avec un objet]
    Par jaujau dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 13/03/2008, 10h32
  4. [Listview] Ligne avec plusieurs couleurs
    Par Runlevel dans le forum C++Builder
    Réponses: 16
    Dernier message: 18/10/2006, 20h29
  5. [VB.NET] ListView Problème avec propriété View à 'List'
    Par elkidos dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/08/2006, 18h10

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