L'ajout d'une plage de valeurs à une ObservableCollection efficacement
J'ai un ObservableCollection
des éléments qui est lié à une liste de contrôle de mon point de vue.
J'ai une situation où j'ai besoin d'ajouter un morceau de valeurs pour le début de la collection.
Collection<T>.Insert
documentation précise les insérer comme un O(n) opérations, et chaque insertion génère également un CollectionChanged
notification.
J'ai donc l'idéal serait d'insérer l'ensemble des éléments en un seul mouvement, sens seule lecture aléatoire de la liste sous-jacente, et j'espère qu'un CollectionChanged
de notification (sans doute un "reset").
Collection<T>
ne pas exposer toute la méthode pour ce faire. List<T>
a InsertRange()
, mais IList<T>
, que Collection<T>
expose par l'intermédiaire de son Items
propriété n'.
Est-il un moyen de faire cela?
- Si vous avez une sauvegarde de terrain pour la collecte de la propriété, vous pouvez assigner une nouvelle instance, puis relancer
OnPropertyChanged
pour la collecte si elle manuellement - connexes/double possible: stackoverflow.com/questions/670577/...
- +1 si
ObservableCollection
vous fait penser à de la mécanique quantique et de la double fente de l'expérience. - blogs.msdn.com/b/nathannesbit/archive/2009/04/20/...
Vous devez vous connecter pour publier un commentaire.
L'ObservableCollection expose un protégé
Items
la propriété, qui est la collection sous-jacente sans la notification de la sémantique. Cela signifie que vous pouvez construire une collection qui fait ce que vous voulez en héritant ObservableCollection:Utilisation:
this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
Pour rendre la réponse ci-dessus utiles w/o dériver une nouvelle classe de base à l'aide de la réflexion, voici un exemple:
Ce réponse ne m'a pas montré les nouvelles entrées dans un DataGrid. Cette OnCollectionChanged fonctionne pour moi:
Exemple:
Souhaité étapes 0,10,20,30,40,50,60,70,80,90,100
--> min=0, max=100, étapes=11