如何在ReactiveX中合并两个布尔可观察对象

时间:2017-03-05 18:10:09

标签: c# unity3d system.reactive

最近我和Rx合作,我在合并两个可观察对象并尝试向他们发出命令时遇到了麻烦。

我有两个observable,所以我想从它们发出一个命令,只有当那些observable为真时,命令才能执行。这是我的代码:

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

这段代码有点有用,但问题是,我有多个BuyCommands(它们之间没有共享任何可观察对象),如果任何CanAddItem改变状态,所有BuyCommands CanExecute都变为true。

我相信我在合并时犯了一个错误,应该以其他方式完成。那我该怎么办呢?

请注意,它是UniRx(统一的Rx),但它们几乎相同。

1 个答案:

答案 0 :(得分:5)

以下内容应该有效:

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。这意味着只有两个流结果都为真时结果才会为真。