答案 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
它变得非常快。