2012-02-16 13 views
6

Tôi có một bộ sưu tập quan sát mà tôi muốn giữ cho các đối tượng ăn và họ nên tiếp cận các nhà quan sát ngay cả sau khi ai đó đã đăng ký nó (trong đó ofcourse là mục đích chính của một quan sát). Tôi phải làm nó như thế nào?Làm cách nào để cập nhật/thêm các mục vào/vào một IObservable <int> động?

Trong chương trình sau, sau khi đăng ký đã xảy ra, tôi muốn cho thêm 3 số nữa để tiếp cận người quan sát. Làm thế nào để tôi làm điều này?

Tôi không muốn đi qua tuyến đường nơi tôi triển khai lớp Quan sát của riêng mình bằng cách triển khai IObservable<int> và sử dụng phương pháp Publish? Có cách nào khác để đạt được điều này không?

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

Bạn muốn IObservable làm gì nếu bạn xóa các mục? –

Trả lời

5

Đây là những gì tôi muốn làm:

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

Thông thường, nếu bạn có thể quan sát những gì đang sản xuất các đầu vào bổ sung, bạn muốn để concat rằng thể quan sát được, chứ không phải là phải nhất thiết đẩy những giá trị này thành một chủ đề, nhưng đôi khi điều đó không thực tế.

+0

không rõ là Đăng ký (OnNext) và chủ đề .OnNext (100) không thực sự là tham chiếu tương tự. Trước đây là bất kỳ phương thức nào để gọi khi một mục đến. Sau đó là một phương thức Rx để thông báo cho các quan sát viên đã đăng ký một sự kiện quan sát mới đã đến trong chuỗi. – BraveNewMath