В настоящее время у меня есть эта общая реализация, наследуя от существующего базового класса, который обеспечивает INotifyPropertyChanged
. Я не могу изменить этот базовый класс, но я хочу предоставить уведомления об изменении свойств также как Observable
, поэтому я реализую интерфейс IReactiveNotifyPropertyChanged
.Как реализовать IReactiveNotifyPropertyChanged в базовом классе, который alreay реализует INotifyPropertyChanged
Я нашел код, приведенный ниже (полученный с помощью процесса проб и ошибок), чтобы быть довольно вовлеченным, и задавался вопросом, можно ли это сделать более простым и сжатым способом.
Кроме того, я изо всех сил пытаюсь придумать идеи для подавления уведомлений. Есть предположения?
public class MyReactiveClass<T> : PropertyChangeNotifyingBaseClass<T>, IReactiveNotifyPropertyChanged<T>
where T : class
{
public MyReactiveClass()
{
Changed = Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>
(
t => PropertyChanged += t, // add handler
t => PropertyChanged -= t // remove handler
// conversion from EventPattern to ReactivePropertyChangedEventArgs
).Select(ev => new ReactivePropertyChangedEventArgs<T>(ev.Sender as T, ev.EventArgs.PropertyName));
Changing = Observable.FromEventPattern<System.ComponentModel.PropertyChangingEventHandler, PropertyChangingEventArgs>
(
t => PropertyChanging += t, // add handler
t => PropertyChanging -= t // remove handler
// conversion from EventPattern to ReactivePropertyChangedEventArgs
).Select(ev => new ReactivePropertyChangedEventArgs<T>(ev.Sender as T, ev.EventArgs.PropertyName));
}
public IObservable<IReactivePropertyChangedEventArgs<T>> Changing { get; }
public IObservable<IReactivePropertyChangedEventArgs<T>> Changed { get; }
public IDisposable SuppressChangeNotifications()
{
// how to deal with suppression of change notifications?!
return Disposable.Empty;
}
}