当返回类型不重要时,是否有更优雅的方法来合并observable?

Val*_*zub 7 c# system.reactive observable reactiveui

我有一个类似ReactiveUI的视图模型.它有几个不同类型的属性来触发NotifyPropertyChanged事件,我想订阅一个方法,当任何被触发时将被调用,但我对实际值不感兴趣.

我当前的代码有点难看(由于true选择不透明).有没有办法表达这一点,这表明在事件发生时只关心他人的意图?

    this.ObservableForProperty(m => m.PropertyOne)
        .Select(_ => true)
        .Merge(this.ObservableForProperty(m => m.PropertyTwo).Select(_ => true))
   .Subscribe(...)
Run Code Online (Sandbox Code Playgroud)

我正在合并8个属性,所以它比显示的更难看.

Ana*_*tts 17

由于这看起来像ReactiveUI,使用WhenAny运算符怎么样:

this.WhenAny(x => x.PropertyOne, x => x.PropertyTwo, (p1, p2) => Unit.Default)
    .Subscribe(x => /* ... */);
Run Code Online (Sandbox Code Playgroud)

一般来说,如果你组合了任意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 => /* ... */);
Run Code Online (Sandbox Code Playgroud)

此外,如果您订阅了ReactiveObject的每个属性,那么最好只使用:

this.Changed.Subscribe(x => /* ... */);
Run Code Online (Sandbox Code Playgroud)