WPF lange Listen

Da ich mich gerade in HTML mit dem Thema “Above the fold” beschäftige, ein kurzer Exkurs zum Problem. Wer mit langen Listen operiert kommt schnell in Performance Probleme beim rendering. Auch WPF hat das Problem. Allerdings existiert seit langem eine vollautomatische Lösung.

Im Listview oder Listbox Control wird nicht mehr ein Stackpanel verwendet um die Liste zu erstellen, sondern ein VirtualizationStackpanel. Diese rendert nur den sichtbaren Bereich (und ein wenig darüber hinaus) und ist damit um ein vielfaches schneller als früher. Wer sich das “früher” mal antun möchte kann per Attached Property das Layout umstellen.

   1:  VirtualizingStackPanel.IsVirtualizing="false"

 

Allerdings braucht man viele hundert oder Tausend Listeneinträge um den Effekt auch zu bemerken.

Das Combobox Control verwendet nach wie vor intern das Stackpanel. In einem Test fülle ich diese mit 70.000 einträgen. Das User Interface ist dann nicht mehr bedienbar.

Allerdings lässt sich das VirtualizationStackpanel auch ohne Probleme in anderen Listen nutzen. In Visual Studio WPF Designer per Rechtsklick das Template des ItemspanelTemplate extrahieren.

image

Im XAML Code (oder auch per Contextmenü) wird dann aus dem Stackpanel durch vorstellen von Virtualizing eine superperformante XAML Liste.

   1:   <Window.Resources>
   2:          <ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
   3:              <VirtualizingStackPanel IsItemsHost="True"/>
   4:          </ItemsPanelTemplate>
   5:      </Window.Resources>

 

Auch das scrollen von über fünfzigtausend Einträgen geht ohne Verzögerung.

Das gibts in HTML5 nicht mal im Ansatz.

Kommentare sind geschlossen