2017-03-05 2 views
0

최근 Rx에서 작업 중이며 두 관측 가능 항목을 병합하고 명령을 작성하는 데 문제가 있습니다.ReactiveX에서 두 개의 부울 관측 값을 병합하는 방법

나는 두 개의 관찰 대상을 가지고 있으므로, 그 대상에서 명령을 내리고 싶습니다. 그러면 해당 관찰 대상이 참인 경우에만 명령을 실행할 수 있습니다. 여기에 내 코드 :

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

그럼이 코드가 좀 작동합니다,하지만 문제는 내가 여러 BuyCommands을 가지고있다 (서로 간의 관찰 가능한 공유되지 않음) 및 CanAddItem 상태를 변경하는 경우, 모든 BuyCommands CanExecute가되고 참된.

저는 병합에있어 실수를 저질렀다고 믿습니다. 그것은 다른 방법으로 이루어져야합니다. 어떻게 해결해야합니까?

UniRx (통합을위한 Rx)이지만 거의 같습니다.

답변

4

다음 작동해야

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

CombineLatest는 두 개의 스트림들을 결합하고 값 시퀀스 중 하나 발행 할 때마다 발행한다. 공개 된 값은 keySelector 매개 변수의 결과 (예 : (x,y) => x && y)를 기반으로합니다. 즉, 두 스트림 결과가 모두 참인 경우에만 결과가 true가됩니다.