La Manipulation OnPropertyChanged

Je ne suis pas très versé dans l'événement de base de la programmation. En gros, je suis toujours en titubant avec elle. Je vais essayer d'obtenir quelque chose de mis en place, mais même avec les tutos, je ne peut pas envelopper la tête autour de lui. Ce que je voudrais faire (dans les mots) est le suivant:

  1. J'ai un dataobject où la modification d'une propriété. J'ai remarqué cela dans le setter de la propriété, et que vous voulez élever un événement que la propriété a changé.

  2. Ailleurs (dans une autre classe entièrement), je veux savoir que la propriété sur cet objet a changé, et prendre des mesures.

Maintenant, je suis sûr que c'est un scénario assez commun, mais mon google-fu est de me laisser descendre. Je suis tout simplement pas comprendre http://msdn.microsoft.com/en-us/library/ms743695.aspx.

J'ai ceci:

public class ChattyClass {
  private int someMember;

  public event PropertyChangedEventHandler PropertyChanged;

  public int SomeMember {
    get {
      return this.someMember;
    }
    set {
      if (this.someMember != value){
        someMember = value;
        //Raise event/fire handlers. But how?
      }
   }
}

public class NosyClass{
  private List<ChattyClass> myChatters;

  public void addChatter(ChattyClass chatter){
    myChatters.add(chatter);
    //Start listening to property changed events
  }

  private void listner(){
    //I want this to be called when the PropertyChangedEvent is called
    Console.WriteLine("Hey! Hey! Listen! A property of a chatter in my list has changed!");
  }
}

Que dois-je faire pour la relier?

Concernant le commentaire de me pointer en arrière pour le lien:

Dans l'exemple que je vois:

protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }
}

Ce que je ne comprends pas:

  • Pourquoi n'est-ce pas juste appeler PropertyChanged(this, new PropertyCHangedEventArgs(name))
  • Où PropertyChanged affectés?
  • Ce qui ne l'attribution de ressembler?
  • L'exemple que vous avez un lien pour montre la nécessaire OnPropertyChanged mise en œuvre; pouvez-vous être plus clair, où l'écart est ici?
  • Votre classe doit implémenter l'interface INotifyPropertyChanged pour le faire fonctionner. Donc, la première ligne doit être: public class ChattyClass : INotifyPropertyChanged {
  • il n'est pas nécessaire de mettre en œuvre INotifyPropertyChanged. On peut juste ajouter le PropertyChanged événement à toute la classe si il ne veut pas l'utiliser dans n'importe quel type de liaison de données. Mais de toute façon il est recommandé d'utiliser l'interface mentionnées.
  • Dans WPF/Silverlight, il est nécessaire. Reportez-vous à stackoverflow.com/questions/1644080/...
  • Le lien est (effectivement) cassé.
InformationsquelleAutor Martijn | 2012-08-20