Eu tenho um ItemsControl
contendo uma lista de dados que gostaria de virtualizar, no entanto VirtualizingStackPanel.IsVirtualizing="True"
, parece não funcionar com um ItemsControl
.
É realmente esse o caso ou existe outra maneira de fazer isso que eu não conheço?
Para testar, tenho usado o seguinte bloco 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>
Se eu mudar ItemsControl
para a ListBox
, posso ver que o Initialized
evento ocorre apenas algumas vezes (as margens enormes são apenas para que eu só precise passar por alguns registros), no entanto, à medida que ItemsControl
cada item é inicializado.
Eu tentei definir o ItemsControlPanelTemplate
como a VirtualizingStackPanel
mas isso não parece ajudar.
ItemsControl
emScrollViewer
instread acrescentandoScroll
queControlTemplate
?Com base na resposta de DavidN, aqui está um estilo que você pode usar em um ItemsControl para virtualizá-lo:
Não gosto da sugestão de usar um ListBox, pois eles permitem a seleção de linhas nas quais você não deseja necessariamente.
fonte
É só que o padrão
ItemsPanel
não é aVirtualizingStackPanel
. Você precisa alterá-lo:fonte