2017-03-05 5 views
0

最近、Rxで作業していましたが、2つのオブザーバをマージしてコマンドを作成しようとしています。ReactiveXで2つのブールオブザーバをマージする方法

私は2つのオブザーバブルを持っているので、それらからコマンドを作りたいと思います。そして、それらのオブザーバブルが真である場合にだけコマンドを実行する必要があります。ここに私のコードは次のとおりです。

BuyCommand = playerData.Gold.Select(x => x >= boosterStoreItem.price) 
      .Merge(inventoryItem.CanAddItem.Select(x => x)) 
      .ToReactiveCommand(); 

さて、このコードはちょっと作品ですが、問題はどのCanAddItemはすべてBuyCommands CanExecuteはなってきて、状態を変更した場合、私は複数のBuyCommandsを持っている(彼らはお互いの間の任意の観測を共有していない)と、です本当。

私は合併に間違いがあり、それが他の方法で行われるべきだと思います。だから私はそれを修正する必要がありますか?

UniRx(統一の場合はRx)ですが、ほとんど同じです。

答えて

4

以下が動作するはず:

BuyCommand = playerData.Gold.Select(x => x >= boosterStoreItem.price) 
      .CombineLatest(inventoryItem.CanAddItem.Select(x => x), (x,y) => x && y) 
      .ToReactiveCommand(); 

CombineLatestは、2つのストリームを結合し、値配列のいずれか一つパブリッシュするたびにパブリッシュ。公開された値はkeySelectorパラメータの結果に基づいています。この例では(x,y) => x && yです。これは、両方のストリーム結果が真である場合にのみ結果が真となることを意味します。

関連する問題