Pourquoi ObservableCollection ne prend-il pas en charge les modifications en bloc?
Quels sont les problèmes potentiels causés par une ObservableCollection
le soutien des opérations comme AddRange
ou RemoveRange
? Il doit y avoir une raison pourquoi Microsoft n'a pas les fournir, maintenant que ObservableCollection est donc fréquemment utilisé avec WPF.
Vous pouvez implémenter votre propre collection qui prend en charge des opérations en bloc et met en œuvre INotifyCollectionChanged
. Qu'advient-il si je lier un contrôle de ce type à un ItemsControl?
Personne ne sait de ItemsControls qui ne supportent pas les modifications en bloc?
source d'informationauteur DanT
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que c'est que il ya des inconvénients potentiels ou des problèmes, c'est juste qu'il n'y est pas. En fait, vous trouverez que la plupart des types de Système.Les Collections.Générique de' ne 'AddRange' fonctionnalité.
Pendant ce temps, beaucoup de gens ont créé leur propre version de "ObservableCollection" afin de fournir la fonctionnalité que vous souhaitez. INotifyCollectionChanged contient suffisamment d'informations pour ses gestionnaires à prendre note de quand toute une gamme d'articles ont été touchés sans doute pour cette raison.
Dernier mais non le moindre, si vous liez une collection qui a ces "Gamme" type d'opérations, vous trouverez qu'ils fonctionneront avec votre INTERFACE utilisateur que vous attendez
Il existe de nombreuses extensions pour
ObservableCollection
qui peut être trouvé sur l'internet que d'ajouter le concept de l'ajout /suppression de gamme, ou vous permettre de reporter les mises à jour et le feu manuellement. Voir, par exemple, ce Débordement de Pile question:ObservableCollection Ne prend pas en charge AddRange méthode, donc je être averti de chaque élément ajouté, en plus de ce sujet INotifyCollectionChanging?
Vous pouvez également mettre en place un ajout en masse qui déclenche un événement de réinitialisation, qui sera la cause de l'INTERFACE utilisateur de re-rendre tous les éléments de la collection:
http://peteohanlon.wordpress.com/2008/10/22/bulk-loading-in-observablecollection/
Ceux-ci vous permettent de gérer plus efficacement les mises à jour de l'INTERFACE utilisateur. Comment un
ItemsControl
gère une collection d'événements de changement qui détaille une liste des éléments modifiés est à la WPF cadre lui-même. Je suis en supposant qu'il gère intelligemment!Mon conseil pour vous est, si la performance est essentielle pour vous et que vous avez des collections avec de nombreux éléments en cours de mise à jour et que vous rencontrez des problèmes de performance, puis une sous-classe
ObservableCollection
pour gérer la collecte modifié de notification d'une manière qui répond le mieux aux besoins de votre application.NotifyCollectionChangedEventArgs
comprend des informations d'index. Suppression d'éléments causes indices de remaniement, tout comme l'insertion d'éléments. Par conséquent, bien que n'étant pas totalement impossible, il serait assez difficile et probablement inefficace de fournir la capacité de travailler avec des plages de.Ils ne fournissent pas de chaque pièce de la fonctionnalité, c'est (aussi) un rapport coût /demande chose.
Oui. Et lorsque vous le faites, vous constaterez que la collection va falloir faire des choix au sujet de comment/quand à propager ces modifications. Je n'ai jamais essayé, mais j'imagine qu'il y a un certain nombre de compromis que la Vue ou le ViewModel peut prendre de meilleures décisions au sujet de réutilisables collection.