2016-07-21 3 views
0

現在、私はINotifyPropertyChangedを提供する既存の基底クラスから継承してこの汎用実装を持っています。この基本クラスは変更できませんが、プロパティ変更通知をObservableとして提供したいので、IReactiveNotifyPropertyChangedインターフェイスも実装します。どのようにIReactiveNotifyPropertyChangedをインプリメントする基本クラスでINotifyPropertyChangedを実装する

私は以下のコード(試行錯誤の過程を通じて得られたもの)がかなり関与していることを発見し、これがより簡潔で簡潔な方法で実行できるかどうか疑問に思っていました。

また、私は通知を抑制するアイデアを考え出すのに苦労しています。何かご意見は?

あなたが ChangedChanging観測を実施するためのコードの最短の作品を書かれている
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; 
    } 
} 

答えて

0

、あなたがより多くを達成するために何をしたいですか? :)

あなたはChangedは、Changingは、SuppressChangeNotificationsは、多分月にあなたがReactiveObjectの他の何かをしたいだろう、最善の解決策は、基本クラスとしてReactiveObjectを使用するだろう必要があるため。 しかし、あなたはそれを行うことができない場合、私はreactiveuiのソースコードをダウンロードし、必要なコードだけの作品取るためにあなたをお勧めします:あなたはより良い自分で特定の機能を実装していない https://github.com/reactiveui/ReactiveUI

を。フレームワークの作成者は多くのバグや問題を扱っていますので、コードは私自身またはあなたが自分で作ることができるものより確かに確かです(私たちが天才でない限り)。

関連する問題