Y a-t-il une différence de performances à utiliser ObservableCollection, qui (si je comprends bien) actualise la vue chaque fois que l'élément est ajouté à la collection, ou utilise à la place une simple collection List et actualise la vue entière lorsque tous les éléments sont déjà ajoutés?

Et le scénario avec List comme décrié ci-dessus est-il même possible? Comment mettre en œuvre cela alors?

Je demande parce que mon ItemsControl est lent, et je me demande s'il serait préférable d'utiliser une simple List à la place ObservableCollection. Je n'ai besoin d'actualiser la vue qu'une seule fois à la fois, alors que tous les éléments sont déjà ajoutés à la collection.

2
Ksice 16 janv. 2017 à 18:46

2 réponses

Meilleure réponse

ObservableCollection<T> implémente IList<T> tout comme List<T> le fait. La principale différence est bien sûr qu'il implémente INotifyCollectionChanged qui permet à WPF de s'y lier.

Le ObservableCollection<T> lance un événement après chaque modification afin que l'interface utilisateur puisse être actualisée. Si vous ajoutez un grand nombre d'éléments de manière séquentielle, cela peut avoir un impact sur vos performances, mais c'est peu probable. Vous pouvez tester cela assez simple en utilisant le constructeur qui prend une liste:

var originalList = new List<SomeClass>();

foreach ([..])
{
  originalList.Add(someInstance);
}

ObservableCollection<SomeClass> uiCollection = new ObservableCollection<SomeClass>(originalList);

De cette façon, vous pouvez créer une liste d'objets complexe et, une fois terminée, vous pouvez créer une ObservableCollection à partir de laquelle vous vous lierez sur l'interface utilisateur.

4
James Drinkwater 7 déc. 2018 à 14:33