I've started exploring the Data and UI virtualization features in WPF recently and stumbled upon something strange.
I created a DataGrid
's with Virtualizing
enabled and filled it with a list with 1,000,000 items. This works great and amazingly fast.
<Grid>
<DataGrid x:Name="employees" VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.VirtualizationMode="Recycling"/>
</Grid>
However, when I nested it under a StackPanel
it loads for over a minute until I get OutOfMemoryException
. I've set the same VirtualizingPanel
properties on the StackPanel
as well but it doesn't help.
Is this behaviour intentional or am I missing something basic here? And how can I manage to support data virtualization in nested controls?
a StackPanel
is an "infinite container" (notice the quotes), in the sense that it does NOT impose a limit in the size of its children, like a Grid
or DockPanel
does.
What this means in terms of UI virtualization is that, since your DataGrid
is not limited in Height
, it will grow endlessly and render all it's items, effectively losing UI virtualization.
See MSDN: WPF Layout for more details.
The bottom line is that you need make sure you use the appropiate layout containers, depending on your needs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With