2009-12-17 10 views
16

J'ai un ListBox qui peut contenir plusieurs lignes d'enregistrements de base de modèle, y compris un Image, lié à un ObservableCollection<MyItem>. Parfois, la collection pourrait contenir des milliers d'objets.ListBox, VirtualizingStackPanel et défilement lisse dans WPF

La performance est excellente, mais le défilement est le comportement par défaut. Je voudrais qu'il ait un défilement lisse, donc j'ai décoché ScrollViewer.CanContentScroll.

Maintenant, j'ai un défilement lisse, mais la performance est horrible: les données sont récupérées dans un fil séparé, et le fil se termine rapidement, mais il faut 10-20 secondes pour les résultats à afficher dans le ListBox. Je suppose que c'est parce que décochant ScrollViewer.CanContentScroll change le VirtualizingStackPanel sous-jacent à un StackPanel régulier et donc il charge la collection entière avant d'afficher les résultats. Donc, ma question est la suivante: comment conserver le défilement sans sacrifier le comportement et les performances de VirtualizingStackPanel?

+5

http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475 Virtua lizingPanel.ScrollUnit = "Pixel" – Guillaume

+0

Vous pouvez avoir le défilement et la virtualisation à la fois si vous êtes prêt à utiliser un petit hack. Voir [cette réponse] (http://stackoverflow.com/questions/1977929/wpf-listbox-with-a-listbox-ui-virtualization-and-scrolling/9875475#9875475) à une question similaire pour plus de détails. –

Répondre

6

Lorsque vous désélectionnez CanContentScroll, vous lose virtualization. Et la réponse est vraiment frustrant: Pour l'instant il n'y a pas hors-the-box solution :(

PS:. Ce n'est pas le premier post ici, demander this very question

+0

J'avais peur de cela mais j'ai dû demander. J'ai cherché avant de demander, mais je n'ai pas trouvé ce poste. Je pourrais creuser juste un peu plus, mais le temps est limité donc je vais devoir perdre le défilement lisse pour le moment. –

3

Si vous utilisez 4.5 .NET. (ou 4.0 si vous êtes prêt à pirater un peu) alors il y a une réponse over here.

[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.]

Questions connexes