Это может быть достигнуто с помощью INotifyPropertyChanged
и отслеживания «владельцев».
Класс C будет отслеживать изменения свойств, но будет принимать объекты B owner
и A notifyMe
при строительстве:
public class C : INotifyPropertyChanged
{
public C(B owner, A notifyMe)
{
Owner = owner;
PropertyChanged += notifyMe.MethodTriggeredByChangeinProp;
}
public B Owner { get; private set; }
private bool prop;
public bool Prop
{
get => prop;
set
{
prop = value;
NotifyPropertyChanged();
}
}
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public event PropertyChangedEventHandler PropertyChanged;
}
Класс B на самом деле не должен быть чем-то особенным, если только вы не хотите знать, когда объект класса C добавлен в ваш список - тогда вам нужна настройка ObservableCollection
;в противном случае List<C>
в порядке.
Класса A MethodTriggeredByChangeinProp
изменяется незначительно:
public class A
{
public List<B> listB;
public void MethodTriggeredByChangeinProp(object sender, PropertyChangedEventArgs e)
{
if(sender is C responsibleC)
{
var responsibleB = responsibleC.Owner;
var changedProp = e.PropertyName;
}
}
Теперь вы знаете ответственные экземпляры класса B и класса C в A всякий раз, когда свойство изменяетсяC.
Вы также можете взглянуть на шаблон наблюдателя в .NET для более подробной настройки.