如何在 ReactiveX 中合并两个布尔值

How to merge two boolean observables in ReactiveX

最近在使用 Rx,我在合并两个 observable 并尝试从它们发出命令时遇到了麻烦。

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

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

好吧,这段代码有点管用,但问题是,我有多个 BuyCommand(它们彼此之间不共享任何可观察值),如果任何 CanAddItem 更改状态,所有 BuyCommand CanExecute 都会变为真。

我认为我在合并时犯了一个错误,应该以其他方式完成。那我该如何解决呢?

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

以下应该有效:

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