Derzeit habe ich diese generische Implementierung durch Erben von einer vorhandenen Basisklasse, die INotifyPropertyChanged
bereitstellt. Ich kann diese Basisklasse nicht ändern, aber ich möchte die Eigenschaftenänderungsbenachrichtigungen auch als Observable
bereitstellen, also implementiere ich auch die IReactiveNotifyPropertyChanged
Schnittstelle.So implementieren Sie IReactiveNotifyPropertyChanged für eine Basisklasse, die retreat implementiert INotifyPropertyChanged
Ich finde den Code unten (durch einen Prozess von Versuch und Irrtum erhalten), um ziemlich beteiligt zu sein und fragte mich, ob dies in einer einfacheren, prägnanteren Weise getan werden könnte.
Auch ich habe Schwierigkeiten, mit Ideen zu kommen, um Benachrichtigungen zu unterdrücken. Irgendwelche Gedanken?
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;
}
}