我有一个类似 ReactiveUI 的 View 模型。它有几个不同类型的属性,可以触发 NotifyPropertyChanged
事件,我想订阅一个方法,在触发任何事件时调用该方法,但我对实际值不感兴趣。
我当前的代码有点难看(由于不透明的 true
选择)。有没有一种表达方式,表明在事件发生时只关心的意图?
this.ObservableForProperty(m => m.PropertyOne)
.Select(_ => true)
.Merge(this.ObservableForProperty(m => m.PropertyTwo).Select(_ => true))
.Subscribe(...)
我正在合并大约 8 个属性,所以它比显示的更难看。
最佳答案
因为这看起来像 ReactiveUI,使用 WhenAny 运算符怎么样:
this.WhenAny(x => x.PropertyOne, x => x.PropertyTwo, (p1, p2) => Unit.Default)
.Subscribe(x => /* ... */);
不过,一般来说,如果您要组合任意 Observable,您也可以使用非扩展方法将其写得更清楚一些:
Observable.Merge(
this.ObservableForProperty(x => x.PropertyOne).Select(_ => Unit.Default),
this.ObservableForProperty(x => x.PropertyTwo).Select(_ => Unit.Default),
this.ObservableForProperty(x => x.PropertyThree).Select(_ => Unit.Default)
).Subscribe(x => /* ... */);
此外,如果您要订阅 ReactiveObject 的每个属性,最好只使用:
this.Changed.Subscribe(x => /* ... */);
关于c# - 当返回类型不重要时,是否有更优雅的方法来合并可观察对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8010372/