Подпишитесь на 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 и этом ' s установщик значений. Теперь я знаю, что могу сделать это вручную , выполнив все шаги, описанные в комментариях. Но это будет много кода, особенно когда я планирую иметь много дочерних свойств, реализующих INotifyPropertyChanged , как это. Конечно, они не всегда будут одного и того же типа, единственное, что у них общего, - это интерфейс INotifyPropertyChanged .

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

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

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

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

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

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

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

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

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

Есть ли у вас хорошие советы или даже m планирует иметь много дочерних свойств, реализующих INotifyPropertyChanged , как это. Конечно, они не всегда будут одного и того же типа, единственное, что у них общего, - это интерфейс INotifyPropertyChanged .

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

Есть ли у вас хорошие советы или даже m планирует иметь много дочерних свойств, реализующих INotifyPropertyChanged , как это. Конечно, они не всегда будут одного и того же типа, единственное, что у них общего, - это интерфейс INotifyPropertyChanged .

Причина в том, что в моем реальном сценарии у меня есть сложный элемент "(в тележке) объект, который имеет свойства вложенных объектов на нескольких уровнях (у элемента есть объект" License ", который сам может снова иметь дочерние объекты), и мне нужно получать уведомление о любом отдельном изменении" элемента ", чтобы иметь возможность чтобы пересчитать цену.

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

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

30
задан thmshd 14 November 2019 в 13:44
поделиться