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 :

INotifyPropertyChanged et binding de plusieurs vues


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Par défaut INotifyPropertyChanged et binding de plusieurs vues
    Bonjour,

    Je forme actuellement au C# grâce au livre C# Step by Step des éditions Microsoft et je bloque au niveau de l'interface INotifyPropertyChanged. Il s'agit d'une petite applications avec 2 vues (grande taille et taille réduite) où il faut faire en sorte par binding que la modification de l'une des vue se répercute sur l'autre.

    Ci-dessous, un extrait de la classe telle que présentée dans le livre

    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
    using System.ComponentModel;
     
    Public Customer: INotifyPropertyChanged
    {
        private int _customerID;
        public int CustomerID
        {
            get => this._customerID;
            set
            {
                this._customerID;
                this.OnPropertyChanged(nameof(CustomerID));
            }
     
        //...
     
       public event PropertyChangingEventHandler PropertyChanged; // pose problème
     
       protected virtual void OnPropertyChanged(string propertyChanged)
       {
           PropertyChanged?.Invoke(this, new PropertyChangingEventArgs(propertyName)); // écriture condensée par vraiment conseillée, mais ça suffit pour l'exemple ;-)
       }
    }
    Visual Studio me propose d'implémenter l'interface comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
            {
                add
                {
                    throw new NotImplementedException();
                }
     
                remove
                {
                    throw new NotImplementedException();
                }
            }
    J'avoue être quelque désemparé (je débute en C#). Avez-vous une idée comment résoudre ce problème ?

    Merci par avance !

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Tu as déclaré un PropertyChangingEventHandler lieu d'un PropertyChangedEventHandler.

    Par ailleurs ton implémentation de la propriété CustomerID est erronée, je ne sais pas si c'est une simple erreur de transcription dans le post ou si c'est vraiment ton code, mais dans le doute :

    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
    public Customer: INotifyPropertyChanged
    {
        private int _customerID;
        public int CustomerID
        {
            get => this._customerID;
            set
            {
                if(this._customerID == value) return; // pour éviter la propagation du property changed si la nouvelle valeur est identique à la valeur actuelle
                this._customerID = value;
                this.OnPropertyChanged(); // plus besoin de spécifier le nom de la propriété
            }
        }
     
        //...
     
       public event PropertyChangedEventHandler PropertyChanged; // pose problème
     
       protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) // grâce à l'attribut CallerMemberNameAttribute le nom du membre appelant sera automatiquement mis dans le paramètre
       {
           PropertyChanged?.Invoke(this, new PropertyChangingEventArgs(propertyName)); // écriture condensée par vraiment conseillée, mais ça suffit pour l'exemple ;-) <= si, c'est bien l'implémentation moderne
       }
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Octobre 2018
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 216
    Par défaut
    Merci pour ces corrections .

    A vrai dire, je travaille à partir d'un kindle et il y a quelques petites erreurs. Par exemple, [codeinline]_customerID[codeinline] est déclarée comme Public... mais j'avoue que c'est de ma faute d'avoir écrit Public au lieu de public, idem pour PropertyChangedEventHandler

    Par contre, de ce que j'ai vu pour l'instant, le set n'est pas modifié pour éviter la propagation du "property changed"...

Discussions similaires

  1. Plusieurs vues sur un même fichier
    Par minicat dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/05/2014, 21h53
  2. [MFC] Plusieurs vues sur le même CTreeCtrl
    Par Denn's dans le forum MFC
    Réponses: 4
    Dernier message: 17/04/2006, 19h12
  3. [MFC]Application avec plusieurs vues
    Par tus01 dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2006, 16h17
  4. [MFC]Impression de plusieurs vues
    Par valdeub dans le forum MFC
    Réponses: 3
    Dernier message: 19/01/2006, 09h30
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

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