2010-10-19 5 views
2

J'ai écrit une belle classe de file d'attente prioritaire,Comment rendre BlockingCollection observable?

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

que je veux maintenant envelopper dans un dans un BlockingCollection,

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

Pour qu'il puisse ajouter une capacité maximale, et nous espérons que certains thread-sécurité. Maintenant, cependant, je semble avoir perdu la fonctionnalité observable!

Comment puis-je connecter un DataGrid à cette collection pour qu'il reçoive toujours les notifications de modification de collection?

Répondre

0

BlockingCollection n'implémente pas l'interface INotifyCollectionChanged qui est essentielle pour la liaison de données (AFAIK). On dirait que vous devez enrouler votre propre implémentation (héritant de la collection de blocage ou l'encapsulant) qui implémente ladite interface.

+0

Ne pense pas que je fais réellement ... Je dois juste lier à la collection sous-jacente à la place. – mpen

1

La liaison à la collection sous-jacente (la file d'attente prioritaire) semble fonctionner. Ensuite, je viens d'appeler Add et Take sur la collection de blocage à la place. Je suppose que c'est pourquoi ils ont décidé de garder les objets séparés.