Как заставить события PropertyChanged всплывать? - PullRequest
1 голос
/ 23 января 2009

У меня есть иерархия объектов (объектов A, B), каждый из которых реализует INotifyPropertyChanged такой, что ...

A имеет член типа B, B имеет член C, C имеет тип bool

При изменении C происходит событие PropertyChanged, однако это не вызывает событие изменения свойства B. И, следовательно, A не реагирует на изменения B.

Есть ли хороший способ, чтобы вспомнить это?

Ответы [ 2 ]

0 голосов
/ 17 июня 2012

Это довольно упрощенное решение, но вы не можете просто подписаться на событие PropertyChanged и распространить вызов?

Е.Г.

MyContainedObject.PropertyChanged += PropertyChangedHandler;

и затем в вашем обработчике:

private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
    this.OnPropertyChanged(e.PropertyName);
}

Это прекрасно работает, когда ваши объекты имеют свойства с одинаковыми именами. Если у вас есть свойства с разными именами, вам придется проделать немного больше работы для преобразования значений свойств.

private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
{
    switch(e.PropertyName)       
    {         
     case "Property1":   
        this.OnPropertyChanged("ADifferentProperty1");
        break;                  
     case "Property2":            
        this.OnPropertyChanged("ADifferentProperty2");
        break;                   
     default:            
        this.OnPropertyChanged(e.PropertyName);           
        break;      
   }
}
0 голосов
/ 24 января 2009

Это здорово - мне нужно потратить еще немного времени на это. Спасибо.

Я нашел другое решение, но это что-то вроде хака. Я просто установил свой путь привязки к вложенному типу. Используя мой пример выше, в моем xaml (который имеет DataContext объекта A) я установил привязку как ...

{Binding Path = B.C}

Барботирование события определенно более элегантно.

...