Подписаться на INotifyPropertyChanged для вложенных (дочерних) объектов

Я ищу чистый иэлегантный решение для обработкиINotifyPropertyChanged событие вложенных (дочерних) объектов. Пример кода:

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

}

Сосредоточиться наBestFriend Свойство и его значение. СейчасЯ знаю, что я мог бы сделать это вручную, реализуя все шаги, описанные в комментариях. Но это будет много кода, особенно когда я планирую реализовать много дочерних свойствINotifyPropertyChanged как это. Конечно, они не всегда будут одного типа, единственное, что у них общегоINotifyPropertyChanged интерфейс.

Причина в том, что в моем реальном сценарии у меня есть сложный объект «Товар» (в корзине), который имеет свойства вложенного объекта в нескольких слоях (у предмета есть объект «Лицензия», который сам может снова иметь дочерние объекты), и я Нужно получать уведомления о любых единичных изменениях «Предмета», чтобы можно было пересчитать цену.

Есть ли у вас хорошие советы или даже некоторые реализации, которые помогут мне решить эту проблему?

К сожалению, я не могу / не могу использовать шаги после сборки, такие как PostSharp, для достижения моей цели.

Заранее большое спасибо,
Томас

Ответы на вопрос(6)

Ваш ответ на вопрос