ListBox, VirtualizingStackPanel et lisse dans WPF Scrolling
-
20-09-2019 - |
Question
J'ai un ListBox
qui peut avoir plusieurs lignes de dossiers DB, templated y compris un Image
, lié à un ObservableCollection<MyItem>
. Parfois, la collection pourrait contenir des milliers d'articles.
La performance est grande, mais le défilement est le comportement par défaut saccadée. Je voudrais qu'il ait un défilement fluide, donc je décoché ScrollViewer.CanContentScroll
.
Maintenant, j'ai un défilement fluide, mais la performance est horrible: les données sont récupérées dans un thread séparé, et le fil termine rapidement, mais il faut 10-20 secondes pour les résultats à afficher dans le ListBox
. Je suppose que cela est dû décochant ScrollViewer.CanContentScroll
change la VirtualizingStackPanel
sous-jacente à un StackPanel
régulier et il est donc de charger la collection avant d'afficher les résultats.
Alors, ma question est la suivante: comment puis-je conserver le défilement en douceur sans sacrifier le comportement de VirtualizingStackPanel
et de la performance
La solution
Lorsque vous décocher CanContentScroll, vous perdre la virtualisation . Et la réponse est vraiment frustrant: Pour l'instant il n'y a pas de solution hors de la boîte:. (
PS: Ce n'est pas le premier post ici, demander cette question très .
Autres conseils
Si vous utilisez .NET 4.5 (ou 4.0 si vous êtes prêt à pirater un peu) alors il y a une réponse ici .
[Notez que @ commentaire de Guilluame était ici bien avant cette réponse, mais il n'a pas été particulièrement visible lorsque l'écrémage des réponses.]