Ich habe ItemsControl
eine Liste mit Daten, die ich virtualisieren möchte, VirtualizingStackPanel.IsVirtualizing="True"
scheint jedoch nicht mit einem zu funktionieren ItemsControl
.
Ist das wirklich der Fall oder gibt es einen anderen Weg, den ich nicht kenne?
Zum Testen habe ich den folgenden Codeblock verwendet:
<ItemsControl ItemsSource="{Binding Path=AccountViews.Tables[0]}"
VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Initialized="TextBlock_Initialized"
Margin="5,50,5,50" Text="{Binding Path=Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Wenn ich das ItemsControl
in a ändere ListBox
, kann ich sehen, dass das Initialized
Ereignis nur einige Male ausgeführt wird (die riesigen Ränder sind nur so, dass ich nur einige Datensätze durchgehen muss), jedoch wird ItemsControl
jedes Element initialisiert.
Ich habe versucht, das ItemsControlPanelTemplate
auf a zu setzen, VirtualizingStackPanel
aber das scheint nicht zu helfen.
ItemsControl
inScrollViewer
instread ZugabeScroll
zuControlTemplate
?Aufbauend auf der Antwort von DavidN finden Sie hier einen Stil, den Sie für ein ItemsControl verwenden können, um es zu virtualisieren:
Ich mag den Vorschlag, eine ListBox zu verwenden, nicht, da sie die Auswahl von Zeilen ermöglicht, in denen Sie sie nicht unbedingt möchten.
quelle
Es ist nur so, dass der Standardwert
ItemsPanel
nicht a istVirtualizingStackPanel
. Sie müssen es ändern:quelle