ListBox, VirtualizingStackPanel und Smooth Scrolling in WPF
-
20-09-2019 - |
Frage
ich eine ListBox
haben, die viele Zeilen von Templat DB Datensätze haben können, einschließlich eines Image
, gebunden an einen ObservableCollection<MyItem>
. Manchmal könnte die Sammlung Tausende von Artikeln halten.
Die Leistung ist groß, aber das Scrollen ist das Standard jumpy Verhalten. Ich mag es smooth scrolling haben, so dass ich nicht markiert ScrollViewer.CanContentScroll
.
Jetzt habe ich glatt Scrollen, aber die Leistung ist horrend: Die Daten werden in einem separaten Thread abgerufen wird, und der Faden endet schnell, aber es dauert 10-20 Sekunden für die Ergebnisse in der ListBox
zu zeigen. Ich gehe davon aus, dass dies liegt daran, dass Entfernen des Häkchen ScrollViewer.CanContentScroll
den zugrunde liegenden VirtualizingStackPanel
zu einem regelmäßigen StackPanel
ändert und so wird die gesamte Sammlung Laden, bevor die Ergebnisse angezeigt werden.
Also meine Frage ist: Wie behalte ich die das reibungslose Scrollen ohne das VirtualizingStackPanel
Verhalten und Leistung zu opfern
Lösung
Wenn Sie deaktivieren CanContentScroll Sie verlieren Virtualisierung . Und die Antwort ist wirklich frustrierend: Vorerst gibt es keine Out-of-the-box-Lösung. (
PS: Dies ist nicht der erste Beitrag hier gefragt, diese Frage .
Andere Tipps
Wenn Sie .NET 4.5 (oder 4.0, wenn Sie bereit sind, ein bisschen zu hacken), dann ist es eine Antwort über .
[Beachten Sie, dass @ Guilluame Kommentar war hier Art und Weise vor dieser Antwort, aber es war nicht besonders sichtbar, wenn nach Antworten Skimming.]