Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VirtualizingPanel in DataGrid

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?

like image 460
Omri Btian Avatar asked Dec 18 '13 14:12

Omri Btian


1 Answers

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.

like image 59
Federico Berasategui Avatar answered Nov 02 '22 22:11

Federico Berasategui