2016-04-15 19 views
1

私はこの反応性拡張物については初めてですが、本当に有用なものがいくつかあります。2つの反応性プロパティを反応性結合と反応性結合を組み合わせる

私が本当に好きなことの1つは、ブールプロパティをその条件で実行するコマンドに変えることです。私はドアとの相互作用をモデル化する場合

たとえば、私は、私の見解モデルにしていますこのような何か:

public ReactiveProperty<bool> IsOpen{ get; } 

public ReactiveCommand<bool> SetIsLocked { get; } 

その後、私はこのような何かを行うことができます。

this.SetIsLocked = this.IsOpen.Select(isOpen => !isOpen).ToReactiveCommand<bool>(); 
this.SetIsLocked .Subscribe(isLocked => this.Door.IsLocked = isLocked); 

01を入力するたびにCanExecuteが更新されるコマンドが生成されますフラグが変更され、呼び出されると私のドアに適切な値が設定されます。

しかし、私はまた、ブール、このようなsaayなものである別のフラグを追加した場合:

今、私はドアがロックを持っているし、閉じている場合は、私のコマンドを実行したいが、私は持っていない
public ReactiveProperty<bool> HasLock{ get; } 

それを行う方法が見つかりました。

あなたの中には、2つのマージンを組み合わせた別の反応性のあるプロパティを作成することでこれを行うことができますが、私はそれをそのようにすることができますが、私が知りたいのは、 IObservablesをマージし、そのようなものの構文は何でしょうか。

+0

あなたは[ReactiveProperty](https://www.nuget.org/packages/ReactiveProperty/)nugetパッケージを使用していますか? –

+0

これは私たちが使っているものです。バージョン2.4.2 –

答えて

1

私はあなたがこのようCombineLatestを使用することができると思う:

SetIsLocked = 
    IsOpen 
    .CombineLatest(
     HasLock, 
     (open,has_lock) => !open && has_lock) 
    .ToReactiveCommand<bool>(); 
+0

ええ、魅力のように動作します。ありがとう。 –

+0

あなたは歓迎です –

関連する問題