2012-02-16 10 views
6

Ho una collezione osservabile a cui voglio continuare a dare da mangiare agli oggetti e che dovrebbero raggiungere gli osservatori anche dopo che qualcuno li ha sottoscritti (che naturalmente è lo scopo principale di un osservabile). Come lo faccio?Come aggiornare/aggiungere articoli in/a un IObservable <int> in modo dinamico?

Nel seguente programma, dopo che è stato effettuato l'abbonamento, desidero alimentare altri 3 numeri che dovrebbero raggiungere gli osservatori. Come faccio a fare questo?

non voglio andare via il percorso dove implemento mia classe Observable implementando IObservable<int> e utilizzare Publish metodo? C'è un altro modo per raggiungere questo obiettivo?

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

Che cosa vuoi fare l'IObservable se rimuovi gli articoli? –

risposta

5

Questo è quello che farei:

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

In generale, se si può osservare tutto ciò che sta producendo l'input aggiuntivo, che ci si vuole concat che osservabili, piuttosto che spingere imperativamente questi valori in un soggetto, ma a volte non è pratico.

+0

non era chiaro che Subscribe (OnNext) e subject.OnNext (100) non sono realmente lo stesso riferimento. Il primo è un metodo da chiamare quando entra in gioco un oggetto. Quest'ultimo è un metodo Rx per notificare agli osservatori iscritti un nuovo evento osservabile che è arrivato nella sequenza. – BraveNewMath

Problemi correlati