2012-02-16 8 views
6

Tengo una colección observable a la que quiero seguir alimentando objetos y deben llegar a los observadores incluso después de que alguien se haya suscrito (que por supuesto es el objetivo principal de un observable). ¿Cómo lo hago?¿Cómo actualizo/agrego elementos en/a un IObservable <int> de forma dinámica?

En el siguiente programa, después de que la suscripción haya sucedido, deseo ingresar 3 números más que deberían llegar a los observadores. ¿Cómo hago esto?

no quiero ir a través de la ruta, donde puedo aplicar a mi propia clase observable mediante la implementación y el uso de IObservable<int>Publish método? ¿Hay alguna otra forma de lograr esto?

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

¿Qué desea que haga el IObservable si elimina los elementos? –

Respuesta

5

Esto es lo que haría:

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

En general, si se puede observar lo que está produciendo la entrada adicional, que querría que concat observable, en lugar de empujar imperativamente estos valores en un sujeto, pero a veces eso no es práctico.

+0

no estaba claro que Subscribe (OnNext) y subject.OnNext (100) no sean realmente la misma referencia. El primero es cualquier método para llamar cuando entra un elemento. Este último es un método Rx para notificar a los observadores suscritos que ha llegado un nuevo evento observable en la secuencia. – BraveNewMath

Cuestiones relacionadas