如何结合两个可观察对象?

时间:2019-12-10 15:50:55

标签: c# .net system.reactive

我有两个IObservable<bool>(canEdit1和canEdit2),如何将它们结合起来?

这是我的代码示例:

var canEdit1 = InerrProperty1.WhenAnyValue(x => x.Property1, x => x,
                (prop1, x) => prop1 != null &&  x != null);
var canEdit2 = InerrProperty2.WhenAnyValue(x=> x.Property1, x=>x.Property2, 
    (prop1,prop2) => !string.IsNullOrEmpty(prop1) && !string.IsNullOrEmpty(prop2));

3 个答案:

答案 0 :(得分:2)

您可以使用Merge功能。它应该看起来像这样:

var merged = canEdit1.Merge(canEdit2);

您以后可以订阅它,或对其进行其他操作。

答案 1 :(得分:0)

由于WhenAny internally uses CombineLatest并保证在订阅时会产生值,因此要将它们中的两个结合在一起,您将使用CombineLatest运算符本身。这个问题似乎是针对ReactiveUI属性验证的。

var combined = Observable.CombineLatest(canEdit1, canEdit2, (prop1, prop2) => prop1 && prop2);

答案 2 :(得分:0)

有了system.reactive库,combining可观察对象有多种方法。已经解释了here,没有一个实现拓扑有序查询解析。在诸如钻石依赖图的情况下,它们都不会避免中间/非相干状态。

diamond dependency graph: A -> Input, B -> Input, Output -> A, Output ->B

Storm.Net(简单的拓扑顺序反应模型),他试图提供一种数据模型,该数据模型以拓扑顺序传播更新。

相关问题