Abonnieren Sie INotifyPropertyChanged für verschachtelte (untergeordnete) Objekte

Ich bin auf der Suche nach einem sauberen und elegante Lösung zu behandeln, die INotifyPropertyChanged Falle verschachtelte (untergeordnete) Objekte. Beispiel-code:

public class Person : INotifyPropertyChanged {

  private string _firstName;
  private int _age;
  private Person _bestFriend;

  public string FirstName {
    get { return _firstName; }
    set {
      //Short implementation for simplicity reasons
      _firstName = value;
      RaisePropertyChanged("FirstName");
    }
  }

  public int Age {
    get { return _age; }
    set {
      //Short implementation for simplicity reasons
      _age = value;
      RaisePropertyChanged("Age");
    }
  }

  public Person BestFriend {
    get { return _bestFriend; }
    set {
      //- Unsubscribe from _bestFriend's INotifyPropertyChanged Event
      //  if not null

      _bestFriend = value;
      RaisePropertyChanged("BestFriend");

      //- Subscribe to _bestFriend's INotifyPropertyChanged Event if not null
      //- When _bestFriend's INotifyPropertyChanged Event is fired, i'd like
      //  to have the RaisePropertyChanged("BestFriend") method invoked
      //- Also, I guess some kind of *weak* event handler is required
      //  if a Person instance i beeing destroyed
    }
  }

  //**INotifyPropertyChanged implementation**
  //Implementation of RaisePropertyChanged method

}

Fokus auf die BestFriend Eigenschaft und die value-setter. Jetzt ich weiß, dass ich könnte dies manuell tunder Umsetzung sämtlicher Schritte in die Kommentare. Aber das wird eine Menge von code, vor allem, wenn ich Plane, viele untergeordnete Eigenschaften der Implementierung INotifyPropertyChanged wie diese. Natürlich sind Sie nicht immer von derselben Art, das einzige, was Sie gemeinsam haben, ist die INotifyPropertyChanged - Schnittstelle.

Der Grund dafür ist, dass in meinem realen Szenario, ich habe einen Komplex "Item" (in den Warenkorb) Objekt, das die verschachtelte Objekt-Eigenschaften über mehrere Ebenen (Element ist, das eine "Lizenz" - Objekt, das können sich untergeordnete Objekte wieder) und ich brauche, um benachrichtigt zu werden, über jede einzelne änderung der "Position" in der Lage sein, um eine Neuberechnung der Preis.

Haben Sie einige gute Tipps, oder sogar einige
Umsetzung zu helfen, mich zu lösen
diese?

Leider bin ich nicht in der Lage/dürfen, verwenden Sie den post-build-Schritte wie PostSharp zu erreichen, mein Ziel.

Vielen Dank im Voraus,
- Thomas

InformationsquelleAutor der Frage thmshd | 2010-11-10

Schreibe einen Kommentar