2012-02-16 15 views
6

私はオブジェクトを与え続ける観測可能なコレクションを持っています。誰かがそれにサブスクライブした後でもオブザーバに到達する必要があります(オブザーバブルの主な目的です)。どうすればいいのですか?IObservable <int>のアイテムを動的に更新/追加するにはどうすればよいですか?

次のプログラムでは、サブスクリプションが発生した後、オブザーバーに到達する必要がある3つの数字を追加したいと思います。これはどうすればいいですか?

IObservable<int>を実装して自分自身のObservableクラスを実装し、Publishメソッドを使用するルートを経由したくないのですか?これを達成する他の方法はありますか?

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var collection = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
     var observableCollection = collection.ToObservable(); 
     observableCollection.Subscribe(OnNext); 
     //now I want to add 100, 101, 102 which should reach my observers 
     //I know this wont' work 
     collection.Add(100); 
     collection.Add(101); 
     collection.Add(102); 
     Console.ReadLine(); 
    } 

    private static void OnNext(double i) 
    { 
     Console.WriteLine("OnNext - {0}", i); 
    } 
} 
+0

アイテムを削除すると、IObservable に何をしたいですか? –

答えて

5

これは私がやるだろうと何である:一般的に

var subject = new Subject<double>(); 
    var collection = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
    var observableCollection = collection 
     .ToObservable() 
     .Concat(subject); //at the end of the original collection, add the subject 
    observableCollection.Subscribe(OnNext); 

    //now I want to add 100, 101, 102 which should reach my observers 
    subject.OnNext(100); 
    subject.OnNext(101); 
    subject.OnNext(102); 

、あなたは追加の入力を生産しているものは何でも観察することができれば、あなたはその観測可能ではなく、命令的プッシュをCONCATしたいと思いますこれらの値は被験者に反映されますが、実用的でない場合もあります。

+0

Subscribe(OnNext)とsubject.OnNext(100)は実際には同じ参照ではないことは明確ではありませんでした。前者は、アイテムが入ったときに呼び出すメソッドです。後者は、登録されたオブザーバに新しいオブザーバブルイベントがシーケンスに到着したことを通知するためのRxメソッドです。 – BraveNewMath

関連する問題