Warum die WPF-Liste bei 5000 Einträgen hakt

Warum die WPF-Liste bei 5000 Einträgen hakt

- Matt

Eine ListBox mit zehntausend Einträgen ist in WPF kein Problem, weil sie nur die sichtbaren Elemente erzeugt. Bis jemand etwas ändert.

Drei Dinge schalten die Virtualisierung ab, ohne dass es eine Warnung gibt:

Ein ScrollViewer außen herum. Die Liste bekommt dann unbegrenzt Platz, hält also alles für sichtbar und erzeugt alles.

Ein anderes Panel. Wer ItemsPanel auf StackPanel setzt, verliert die Virtualisierung. Nötig ist VirtualizingStackPanel.

Gruppierung. Sobald eine CollectionViewSource gruppiert, ist Virtualisierung nur mit VirtualizingPanel.IsVirtualizingWhenGrouping="True" aktiv, und das steht nicht im Standard.

Zusätzlich lohnt sich der Recyclingmodus:

<ListBox VirtualizingPanel.VirtualizationMode="Recycling" />

Damit werden Containerelemente wiederverwendet statt neu erzeugt. Beim Scrollen durch lange Listen ist das der Unterschied zwischen flüssig und ruckelnd.