1

我有一个 IObservable,它最初正在监听一个源:

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

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

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

但是,我只在 item1 更改时看到输出。我是否必须以某种方式刷新订阅?我预计合并的流会立即被拾取。

4

1 回答 1

0

基本思想是使用Subject<IObservable<T>>您订阅的 a 。这使您可以即时添加更多项目。这是一种对其进行抽象的方法(主题是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);
于 2013-05-09T20:46:56.127 回答