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

C# Discussion :

XML : Création d'une classe avec un membre XDocument pas de passage par le setter si modif element


Sujet :

C#

  1. #1
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut XML : Création d'une classe avec un membre XDocument pas de passage par le setter si modif element
    Salut,

    Je travaille toujours sur mon configurateur.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    namespace Objects
    {
        [Serializable]
        public class AppSettingsDocument
        {
            private string _location = null;
            private XDocument _document = null;
     
            public event AppSettingsDocumentChangeHandler OnAppSettingChange;
            public string Location
            {
                get
                {
                    return _location;
                }
                set
                {
                    _location = value;
                    _document = Refreshers.LoadXDocument(_location);
                    if(OnAppSettingChange!=null)
                        OnAppSettingChange(this, new AppSettingsDocumentChangeEventArgs(enAppSettingElementChanged.Location));
                }
            }
     
            [XmlIgnore]
            public XDocument Document
            {
                get
                {
                    return _document;
                }
                set
                {
                    _document = value;
                    if(OnAppSettingChange!=null)
                        OnAppSettingChange(this, new AppSettingsDocumentChangeEventArgs(enAppSettingElementChanged.Document));
                }
            }
     
            public AppSettingsDocument() {
                this._document = new XDocument();
                this._document.Changed += _document_Changed;
            }
     
            private void _document_Changed(object sender, XObjectChangeEventArgs e)
            {
                if (OnAppSettingChange != null)
                    OnAppSettingChange(this, new AppSettingsDocumentChangeEventArgs(enAppSettingElementChanged.Document));
            }
     
            public AppSettingsDocument(string location)
            {
                this._location = location;
                this._document = Refreshers.LoadXDocument(_location);
                this._document.Changed += _document_Changed;
            }
        }
    }
    Dans un autre endroit du code, je change la valeur d'un attribut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                n = config.AppSettings.Document.Descendants("add").Single(x => x.Attribute("key").Value == "Languages");
                string languagesSetting = string.Join(",", languages.Where(x => x.Selected).Select(x => StringEnum.GetStringValue(x.Language)).ToArray());
                n.SetAttributeValue("value", languagesSetting);
    Pourriez-vous m'expliquer pourquoi ça ne passe pas par le setter de Document lorsqu'on modifie un de ses membres ?

    Merci

  2. #2
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Ca ne passe même pas par l’événement.
    _document_Changed

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Nadinette Voir le message
    Pourriez-vous m'expliquer pourquoi ça ne passe pas par le setter de Document lorsqu'on modifie un de ses membres ?
    Parce que la référence vers ton XDocument reste la même, elle ne change pas.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Tu veux dire que je ne dois pas utiliser un passage par ref et qu'après je dois recharger le document ?
    Si c'est ça, a quoi sert l'event Change de XDocument ?

    Merci

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Non, je répondais à la citation dans mon post, tu as posté un autre message entre temps...

    Si tu ne passes pas dans l'évènement c'est qu'il y a un souci quelque part dans ta logique...

    En simplifiant un poil ton code, tu peux copier/coller ca dans une console et tu verras que ca marche parfaitement :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    class Program
    {
    	static void Main(string[] args)
    	{
    		var conf = new AppSettingsDocument();
     
    		// On met à jour la valeur
    		var n = conf.Document.Descendants("add").Single(x => x.Attribute("key").Value == "Languages");
    		n.SetAttributeValue("value", "B");
     
    		Console.WriteLine("Press any key to continue...")
    		Console.ReadKey();
    	}
    }
     
    [Serializable]
    public class AppSettingsDocument
    {
    	private string _location;
    	private XDocument _document;
     
    	public string Location
    	{
    		get { return this._location; }
    		set { this._location = value; }
    	}
     
    	[XmlIgnore]
    	public XDocument Document
    	{
    		get { return this._document; }
    		set { this._document = value; }
    	}
     
    	public AppSettingsDocument()
    	{
    		// Charge le XML
    		this._document = XDocument.Parse(@"<?xml version=""1.0"" encoding=""UTF8""?><config><appSettings><add key=""Languages"" value=""A""/></appSettings></config>");
     
    		// Abonnement
    		this._document.Changed += this._document_Changed;
    	}
     
    	private void _document_Changed(object sender, XObjectChangeEventArgs e)
    	{
    	    // Si on passe dedans, on verra ceci
    		Console.WriteLine("CHANGED!");
    	}
    }
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Merci beaucoup, je vais regarder.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/10/2014, 16h53
  2. Réponses: 3
    Dernier message: 30/01/2014, 21h24
  3. [PDO] Création d'une classe contenant du PDO -> Erreur avec les 'fetch'
    Par Cedrinho dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/06/2010, 08h53
  4. Réponses: 7
    Dernier message: 15/09/2009, 15h54

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