Tengo un que ItemsControl
contiene una lista de datos que me gustaría virtualizar, sin embargo VirtualizingStackPanel.IsVirtualizing="True"
, no parece funcionar con un ItemsControl
.
¿Es este realmente el caso o hay otra forma de hacerlo que no conozco?
Para probar he estado usando el siguiente bloque de código:
<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>
Si cambio el ItemsControl
a a ListBox
, puedo ver que el Initialized
evento solo se ejecuta un puñado de veces (los enormes márgenes son solo para que solo tenga que revisar algunos registros), sin embargo, a medida ItemsControl
que se inicializa cada elemento.
He intentado configurar el ItemsControlPanelTemplate
a VirtualizingStackPanel
pero eso no parece ayudar.
ItemsControl
enScrollViewer
instread añadiendoScroll
aControlTemplate
?Basándose en la respuesta de DavidN, aquí hay un estilo que puede usar en un ItemsControl para virtualizarlo:
No me gusta la sugerencia de usar un ListBox ya que permiten la selección de filas donde no necesariamente lo quieres.
fuente
Es solo que el valor predeterminado
ItemsPanel
no es aVirtualizingStackPanel
. Necesitas cambiarlo:fuente