Я ищу чистое и элегантное решение для обработки события 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 INotifyPropertyChanged Event
// if not null
_bestFriend = value;
RaisePropertyChanged("BestFriend");
// - Subscribe to _bestFriend INotifyPropertyChanged Event if not null
// - When _bestFriend 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
и его BestFriend
значений. Теперь я знаю, что могу сделать это вручную, выполнив все шаги, описанные в комментариях. Но это будет много кода, особенно когда я планирую иметь множество дочерних свойств, реализующих INotifyPropertyChanged
как это. Конечно, они не будут всегда одного типа, единственное, что у них есть, это интерфейс INotifyPropertyChanged
.
Причина в том, что в моем реальном сценарии у меня есть сложный объект "Item" (в корзине), который имеет вложенные свойства объекта над несколькими слоями (элемент имеет объект "Лицензия", который может сам иметь дочерние объекты снова), и я необходимо получить уведомление о каком-либо одном изменении "Item", чтобы иметь возможность пересчитать цену.
У вас есть какие-то хорошие советы или даже какая-то реализация, чтобы помочь мне решить эту проблему?
К сожалению, я не могу/не мог использовать пост-строить шаги, такие как PostSharp для достижения моей цели.
Заранее большое спасибо,
- Томас