1

最初に 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>>購読している を使用することです。これにより、その場でアイテムを追加できます。これを少し抽象化する方法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 に答える