我有一个IObservable,它最初监听一个源:
_itemsChanged = Observable.Merge(item1.ObserveItemChanged);
_itemsChanged.Subscribe(_ => Console.WriteLine("item changed"));
当应用程序运行时,可能会添加其他项目,我想将新项目的流合并到我现有的流:
var item2 = new Item();
_itemsChanged.Merge(item2.ObserveItemChanged);
但是,我只看到item1更改时的输出。我需要刷新订阅吗?我希望合并后的流能够立即被拾取。
基本思想是使用您订阅的Subject<IObservable<T>>
。这让你可以随时添加更多的项目。这里有一种方法来抽象它一点(主题是一个Subject<Item>
,我们然后项目并合并到Observable<T>
):
var subject = new Subject<Item>();
IObserver<Item> newItems = subject;
IObservable<T> itemsChanged = subject.SelectMany(item => item.ObserveItemChanged);
itemsChanged.Subscribe(_ => Console.WriteLine("change"));
// add items
newItems.OnNext(item1);
newItems.OnNext(item2);