WPF ItemsControl - Comment savoir quand les articles ont terminé le chargement, afin que je puisse se concentrer le premier?

StackOverflow https://stackoverflow.com/questions/2492214

Question

Je ItemsControl à mon avis, qui est lié à un ObservableCollection de ViewModel. La collection est remplie, et après un événement de VM pour voir est élevé (pensez des résultats de recherche et événement SearchFinished).

Je voudrais déplacer le focus du clavier au premier élément dans un ItemsControl, mais quand je le fais dans de Voir le code-behind lors de la manipulation SearchFinished, les éléments ne sont pas encore rendus (la collection est remplie déjà, mais le rendu de WPF est asynchrone et n'a pas eu encore), donc il n'y a rien à se concentrer (focus () doit avoir l'arbre visuel des éléments déjà construits).

Je voulais faire (myItemsControl.ItemContainerGenerator.ContainerFromIndex (0) comme UIElement) .Focus () ;, mais comme l'élément 0e n'est pas encore chargé, ContainerFromIndex (0) renvoie null.

J'ai essayé retardais avec Dispatcher.BeginInvoke ... avec une priorité faible, mais qui dépend de la date exacte et ne fonctionne généralement pas.

Comment puis-je attendre jusqu'à ce que le premier élément de ItemsControl est chargé?

Était-ce utile?

La solution

Vous pouvez utiliser l'événement ItemContainerGenerator.StatusChanged, puis vérifiez sa propriété Status. Si le Status == GeneratorStatus.ContainersGenerated, alors vous pouvez sans risque obtenir le premier conteneur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top