簡體   English   中英

ScrollViewer 使用 DataGrid 降低性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM