我有一个最初收听一个来源的IObservable:
_itemsChanged = Observable.Merge(item1.ObserveItemChanged);
_itemsChanged.Subscribe(_ => Console.WriteLine("item changed"));
当应用运行时,可能会添加其他项目,我想将新项目的流合并到现有项目中:
var item2 = new Item();
_itemsChanged.Merge(item2.ObserveItemChanged);
但是,我只在item1更改时才看到输出。我是否必须以某种方式更新订阅?我希望合并的流可以立即被接收。
答案 0 :(得分:0)
基本思路是使用您订阅的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);