时间:2010-07-26 16:38:17

标签: wpf performance datagrid itemssource

4 个答案:

答案 0 :(得分:17)

仅当DataGrid嵌入ScrollViewer中时才会出现此问题:

<ScrollViewer>
    <Datagrid/>
</ScrollViewer>

这是有道理的,因为这种配置会导致整个DataGrid同时被绘制(以便能够正确调整ScrollViewer的客户区域的大小)。从本质上讲,它会覆盖DataGrid的内置虚拟化行为,后者实现了自己的ScrollBars,因此并非所有内容都必须同时放在布局中。

换句话说,很少需要在ScrollViewer中嵌入DataGrid,因为DataGrid有自己的自动滚动。

答案 1 :(得分:5)

我遇到了一个包含DataGrid的UserControl的类似问题,有时当我将UserControl放在一个新窗体或另一个UserControl上时,它会在重绘DataGrid时锁定界面(5秒?)。与调整大小相同。

我追踪到了

  

RowDefinition Height =“Auto”

如果我将UserControl放在StackPanel中,也会出现相同的性能问题。当需要弹出整个数据网格来计算封装容器的大小时,似乎与前面提到的调整大小错误非常相关。

<UserControl x:Class="ExampleUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" d:DesignHeight="481" d:DesignWidth="773">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" /> <!-- 'AUTO' CAUSES EXTREMELY POOR PERFORMANCE -->
        </Grid.RowDefinitions>

        <Grid Grid.Row="0"> <!-- CHANGING TO STACKPANEL CAUSES EXTREMELY POOR PERFORMANCE -->
            <ContentControl Content="{Binding MyDataGridUserControl}" />
        </Grid>
    </Grid>

</UserControl>

我刚刚发现,根据之前的评论,为ContentControl设置MaxHeight =“[whatever]”也可以。它可能比屏幕大。

答案 2 :(得分:3)

答案 3 :(得分:0)

我对绑定的数据网格有同样的问题,我注意到在第一次加载时它很快但在第二次和下一次它很慢。所以当我添加代码时:

DataGrid.ItemsSource = Nothing

然后

TableAdapter.Fill(Mydataset.MyStoredProcedure,....)
DataGrid.ItemsSource=Mydataset.MyStoredProcedure

它变得非常快。