合并后重新订阅IObservable

时间:2013-05-09 19:08:42

标签: c# system.reactive

我有一个最初收听一个来源的IObservable:

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

当应用运行时,可能会添加其他项目,我想将新项目的流合并到现有项目中:

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

但是,我只在item1更改时才看到输出。我是否必须以某种方式更新订阅?我希望合并的流可以立即被接收。​​

1 个答案:

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