2013-12-18 23 views
3

我已經開始探索近日在WPF的數據和UI虛擬化功能和偶然發現一些奇怪的事情。VirtualizingPanel DataGrid中

我創建了一個DataGrid's,啓用了Virtualizing,並用1,000,000個項目填充了一個列表。這項工作非常棒,速度驚人。

<Grid> 
    <DataGrid x:Name="employees" VirtualizingPanel.IsVirtualizing="True" 
           VirtualizingPanel.IsContainerVirtualizable="True" 
           VirtualizingPanel.VirtualizationMode="Recycling"/> 
</Grid> 

然而,當我嵌套其下StackPanel它過了一分鐘加載,直到我得到OutOfMemoryException。我給自己定的StackPanel相同VirtualizingPanel性能很好,但它並不能幫助。

這種行爲是故意的還是我失去了一些東西基本在這裏嗎?我如何能夠在嵌套控件中支持數據虛擬化?

回答

9

一個StackPanel是一個「無限容器」(注意引號),在這個意義上,它並沒有在其子項的大小加以限制,如GridDockPanel一樣。

這對於UI虛擬化來說意味着什麼,因爲DataGrid不限於Height,它會無限增長並渲染所有項目,從而有效地失去UI虛擬化。

詳情請參閱MSDN: WPF Layout

底線是,你需要確保你使用的此時,相應的佈局容器,根據您的需要。