2013-05-09 46 views
1

我有一個最初聽一個源的的IObservable:重新訂閱的IObservable後合併

_itemsChanged = Observable.Merge(item1.ObserveItemChanged); 
_itemsChanged.Subscribe(_ => Console.WriteLine("item changed")); 

隨着應用程序運行時,可能會增加額外的項目,我想新項目的流合併到現有之一:

var item2 = new Item(); 
_itemsChanged.Merge(item2.ObserveItemChanged); 

但是,我只在item1發生變化時纔看到輸出。我是否必須以某種方式刷新訂閱?我預計合併後的流將立即被收回。

回答

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);