[英]ScrollViewer slow performance with DataGrid
我有以下場景:
<ScrollViewer>
<Grid>
<!--many other controls-->
<DataGrid />
</Grid>
</ScrollViewer>
現在,當我將 DataGrid 綁定到大量數據(大約 10.000 行)時,我的性能非常慢。 事實上,我得到 OutOfmemory 異常(我有 8 GB 內存)! 我在某處讀到這是因為 ScrollViewer 覆蓋了 DataGrid 虛擬化(或類似的東西),但我不知道如何防止這種情況發生。 如果我刪除 ScrollViewer,問題就解決了! 數據加載不到一秒鍾。
我想保留 ScrollViewer(因為其他控件)並具有良好的性能。 那可能嗎? 如果沒有,是否還有其他解決方法?
此類問題的常見解決方法是在與DataGrid
相同的行中添加一個不可見的“調整大小元素”,然后您可以將DataGrid.Height
綁定到調整大小元素的ActualHeight
。 這樣,您的DataGrid
將始終使用RowDefinition
的高度。 例子
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Content="Some Control.." />
<Rectangle Name="sizingElement"
Grid.Row="1"
Fill="Transparent"
Margin="1"/>
<DataGrid Grid.Row="1"
Height="{Binding ElementName=sizingElement,
Path=ActualHeight, FallbackValue=1}">
<!--...-->
</DataGrid>
<Button Content="Some more controls etc.." Grid.Row="2"/>
</Grid>
</ScrollViewer>
外部 ScrollViewer 有效地為 DataGrid 提供了盡可能多的空間,這樣它的高度就會變得很大,一次顯示所有行。 例如,只需通過在其上顯式設置高度來限制 DataGrid。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.