現在、私はINotifyPropertyChanged
を提供する既存の基底クラスから継承してこの汎用実装を持っています。この基本クラスは変更できませんが、プロパティ変更通知をObservable
として提供したいので、IReactiveNotifyPropertyChanged
インターフェイスも実装します。どのようにIReactiveNotifyPropertyChangedをインプリメントする基本クラスでINotifyPropertyChangedを実装する
私は以下のコード(試行錯誤の過程を通じて得られたもの)がかなり関与していることを発見し、これがより簡潔で簡潔な方法で実行できるかどうか疑問に思っていました。
また、私は通知を抑制するアイデアを考え出すのに苦労しています。何かご意見は?
あなたがChanged
と
Changing
観測を実施するためのコードの最短の作品を書かれている
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;
}
}