2010-10-19 100 views
2

我已經寫了一個漂亮的優先級隊列類,如何使BlockingCollection可觀察?

class ConcurrentPriorityQueue<T> 
    : IProducerConsumerCollection<KeyValuePair<int,T>>, INotifyCollectionChanged 
    where T : INotifyPropertyChanged 

,我現在想在一個包裹在BlockingCollection

Queue = new ConcurrentPriorityQueue<DownloadItem>(10); 
Buffer = new BlockingCollection<KeyValuePair<int, DownloadItem>>(Queue, 1000) 
    { 
     new KeyValuePair<int, DownloadItem>(0, new DownloadItem{Url = "stackoverflow.com"}) 
    }; 

因此,它可以添加的最大容量,並希望一些線程安全。然而,現在,我似乎失去了可觀察的功能!

如何將DataGrid掛接到此集合,以便它仍然收到收集更改的通知?

回答

0

BlockingCollection不實現INotifyCollectionChanged接口對於數據綁定(AFAIK)很重要。看起來你必須實現自己的實現(從阻塞集合繼承或封裝它),實現上述接口。

+0

不要以爲我實際上......我只需要綁定到底層集合。 – mpen 2010-10-19 09:07:54

1

綁定到底層集合(優先級隊列)似乎工作。然後,我只是在阻止集合上調用AddTake。我想這就是爲什麼他們決定保持對象分開。