Quel événement est déclenché une fois que tous les éléments sont chargés et affichés dans un ListView?

Quel événement est déclenché lorsque tous les éléments sont chargés et affichés dans une liste WPF? J’essaie d’optimiser l’affichage de nombreux éléments dans un ListView. Le ListView est rempli d’éléments avec le code suivant:

List selectedArtistsList; //Code to fill selectedArtistsList with about 6,000 items not shown here CollectionViewSource selection1ViewSource = ((CollectionViewSource)(this.FindResource("selection1Source"))); Stopwatch stopWatch1 = new Stopwatch(); stopWatch1.Start(); selection1ViewSource.Source = selectedArtistsList; stopWatch1.Stop(); Debug.Print("Time used: {0}ms", stopWatch1.ElapsedMilliseconds.ToSsortingng()); 

Quand je lance ce code, je vois “Time used 119ms” ou quelque chose de similaire. Mais cela prend environ 3 secondes de plus avant que les éléments de ListView apparaissent à l’écran. Existe-t-il un événement qui se déclenche après le chargement de ListView avec les éléments? Je suis intéressé pour mesurer quand le ListView semble prêt pour l’utilisateur.

Merci pour vos commentaires. J’ai trouvé une solution. Après le commentaire de Nick Baker, j’ai cherché sur Dispatcher. Après avoir lu et testé, j’ai trouvé cette page

WPF: Exécution de code lorsque le rendu de la fenêtre est terminé

Ensuite, j’ai changé mon code comme suit (pas le code complet, mais uniquement les parties pertinentes):

 private void Work(){ List selectedArtistsList; //Code to fill selectedArtistsList with about 6,000 items not shown here CollectionViewSource selection1ViewSource = ((CollectionViewSource)(this.FindResource("selection1Source"))); stopWatch1.Reset(); stopWatch1.Start(); selection1ViewSource.Source = selectedArtistsList; Debug.Print("After setting Source: {0}ms", stopWatch1.ElapsedMilliseconds.ToSsortingng()); //New: Dispatcher.BeginInvoke(new Action(RenderingDone), System.Windows.Threading.DispatcherPriority.ContextIdle, null); } //New Stopwatch stopWatch1 = new Stopwatch(); private void RenderingDone() { Debug.Print("After rendering is done: {0}ms", stopWatch1.ElapsedMilliseconds.ToSsortingng()); } 

Après avoir exécuté cela, je vois: Après avoir défini Source: 124ms Une fois le rendu terminé: 2273ms

La dernière ligne apparaît après le rendu et indique l’heure correcte. C’est exactement ce que je voulais.