【发布时间】:2014-02-14 10:54:43
【问题描述】:
我有一个问题是本网站上提出的以下问题的延伸。
Is there a more elegant way to merge observables when return type is unimportant?
我有一个IObservable<Unit>(比如说X)、一个反应式集合(Y)和一个属性(Z)。返回类型并不重要。我只想在这些变化时订阅。
我知道如何使用Observable.Merge 观察所有 3 和 Subscribe,如下所示。
Observable.Merge(X, Y.Changed, ObservableForProperty(Z).Select(_ => Unit.Default)).Subscribe(..)
而且它有效。
但是,当我尝试使用WhenAny(...,....,....).Subscribe() 时,当我的X 更改时,订阅不会被触发。使用WhenAny(...) 而不是Observable.Merge(..) 执行上述操作的语法是什么?
我更喜欢使用WhenAny(....),因为我在其他地方使用ReactiveUI。
示例:
假设我有一个派生自 ReactiveObject 的类,具有以下属性。
public class AnotherVM : ReactiveObject
{
public bool IsTrue
{
get { return this.isTrue; }
set { this.RaiseAndSetIfChanged(x => x.isTrue, ref this.isTrue, value); }
}
public IObservable<Unit> Data
{
get { return this.data; }
}
public ReactiveCollection MyCol
{
get { return Mycol; }
}
}
public class MyVM : ReactiveObject
{
MyVM
{
// do WhenAny or Observable.Merge here....
}
}
我想在AnotherVM 类中使用Observable.Merge(..) 或WhenAny(...) 在MyVM 类中观察上述属性。我发现当我使用WhenAny(...) 或Merge(...) 在MyVM 中订阅上述内容时,当三个属性中的任何一个发生更改时,我并不总是收到通知。
【问题讨论】:
标签: system.reactive observable reactiveui