Je suis intéressé par le moyen le plus efficace de modifier une collection observable de telle sorte qu'une seule propriété modifiée soit déclenchée. Disons que je veux remplir la liste avec 3 éléments, il n'y a pas de méthode addCollection ou quelque chose comme ça, donc je dois faire + 3 fois plus clair. Dois-je créer une collection observable différente et affecter? Ou quelles techniques les autres utilisent-ils?Prise en charge de transactions dans une collection observable
Répondre
La classe ObservableCollection
de NET Framework envoie des notifications individuelles en tant que chaque élément ajouté à la collection et ne fournit aucun mécanisme pour les fonctionnalités de type AddRange. Cependant, vous pouvez très facilement créer votre propre collection qui implémente INotifyCollectionChanged
et envoyer toutes les notifications que vous aimez. Le problème que vous pouvez rencontrer est que l'interface INotifyCollectionChanged
inclut la possibilité de spécifier que plusieurs éléments ont été ajoutés à la collection dans un seul message, mais aucune classe NET Framework standard ne crée réellement ces notifications. Pour cette raison, certains contrôles tiers et open source qui supposent un seul élément ont été ajoutés lorsqu'ils reçoivent une notification Ajouter. Même les classes NET Framework intégrées peuvent avoir des bogues non découverts liés à cela. Pour ces raisons, je recommanderais à votre collection personnalisée d'avoir un mode dans lequel elle peut être configurée pour toujours envoyer une notification de réinitialisation à la fin d'un AddRange
au lieu d'une seule notification d'ajout multi-éléments. Vous pouvez l'optimiser davantage en envoyant plusieurs notifications d'ajout à un seul élément ou une notification de réinitialisation en fonction du nombre réel d'éléments ajoutés.
Bien sûr, il existe des situations dans lesquelles il est tout aussi facile de remplacer le ObservableCollection
par un nouveau. Parfois, cela sera beaucoup moins efficace que de boucler Add() car les gestionnaires d'événements et CollectionViews sont reconstruits. D'autres fois, il sera plus efficace si la collection est grande et votre boucle ajoute seulement quelques éléments à la fois. Et parfois ça ne marchera pas du tout.
- 1. Prise en charge MSDTC (Distributed Transactions) dans MySQL
- 2. Conversion d'une collection observable en collection normale
- 3. Sous-type dans une collection Observable vide
- 4. Prise en charge de la sélection de collection Django?
- 5. Reliure Observable collection
- 6. Collection observable avec l'objet actuel?
- 7. Comment copier la collection observable
- 8. Prise en charge de DEVPATH
- 9. DataGrid Silverlight rafraîchissent collection observable
- 10. Écriture de message personnalisé WCF avec la prise en charge des transactions
- 11. Prise en charge de corba dans netbeans
- 12. Prise en charge de l'impression dans Flash
- 13. Obtenir une valeur distincte de la classe de collection observable
- 14. Propriété de collection observable modifiée sur l'élément de la collection
- 15. Pourquoi l'isolation Snapshot n'est-elle pas prise en charge avec Distributed Transactions dans SQL Server
- 16. l'interface ITransactionLocal est pas prise en charge
- 17. Prise en charge de Rijndael en Java
- 18. Prise en charge STL dans Ruby
- 19. Prise en charge du marquage
- 20. Silverlight 3 - Filtrage d'une collection observable
- 21. WCF et ASP.NET: Prise en charge de la prise en charge duplex utilisant AJAX
- 22. HttpClient - Prise en charge de gzip
- 23. Prise en charge de la transaction Tokyo Tyrant
- 24. is_multisite(); Prise en charge de Wordpress 3.0
- 25. Silverlight: lier une collection observable à différents contrôles usuels
- 26. Prise en charge de Ruby xAuth
- 27. Prise en charge de l'imprimante réseau?
- 28. Modification de la collection observable non reflétée dans l'interface utilisateur
- 29. Prise en charge de Spring.Net pour Linq2SQL
- 30. Liaison d'une boîte à liste SelectedItem à une collection observable?
observable collection implémente ICollectionChanged, mais je suis sûr que c'est ce que vous vouliez dire –
Merci Ray, votre réponse était insignifiante ++ :) –
@Aran: Merci pour la correction. Je me suis trompé. BTW, il est en fait INotifyCollectionChanged pas ICollectionChanged (et pas ce que j'avais soit!) –