我有一个DataGrid,通常包含大约30行,它很少超过200.我的问题是当用户通过向上/向下箭头键浏览网格的内容时,它一直卡住(约10到40秒),然后在同一时间DataGrid无法顺利滚动
我的DataGrid
<DataGrid Name="DgInvoiceLines" KeyUp="DgInvoiceLines_KeyUp" BorderBrush="Black"
RowBackground="Silver" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible"
AutoGenerateColumns="False" SelectionUnit="FullRow" SelectionMode="Extended" CanUserAddRows="True" CanUserDeleteRows="True"
HorizontalContentAlignment="Center" CellEditEnding="DgInvoiceLines_CellEditEnding" VerticalContentAlignment="Center"
PreviewKeyDown="DgInvoiceLines_PreviewKeyDown" SelectionChanged="DgInvoiceLines_SelectionChanged"
CurrentCellChanged="DgInvoiceLines_CurrentCellChanged" ItemsSource="{Binding}" BorderThickness="0,2,0,0"
EnableColumnVirtualization="False" EnableRowVirtualization="False" ScrollViewer.CanContentScroll="False">
<DataGrid.Columns>
<DataGridTextColumn Width="Auto" Header="ProductCode" Binding="{Binding ProductCode}"/>
<DataGridTextColumn Width="250" Header="Description" Binding="{Binding Description}" FontSize="14"/>
<DataGridTextColumn Width="61" Header="Inv_Quantity" Binding="{Binding Inv_Quantity}"/>
<DataGridTextColumn Width="63" Header="Grn_Quantity" Binding="{Binding Grn_Quantity}"/>
<DataGridTextColumn Width="59" Header="Inv_Price" Binding="{Binding Inv_Price}"/>
<DataGridTextColumn Width="61" Header="Ord_Price" Binding="{Binding Grn_Price}"/>
<DataGridTextColumn Width="72" Header="Inv_Total" Binding="{Binding Inv_Total}"/>
<DataGridTextColumn Width="74" Header="Grn_Total" Binding="{Binding Grn_Total}"/>
<DataGridTextColumn Width="58" Header="AnalCode" Binding="{Binding AnalCode}"/>
<DataGridTextColumn Width="60" Header="Vat_Rate" Binding="{Binding Vat_Rate}"/>
<DataGridTextColumn Width="60" Header="Vat" Binding="{Binding Vat}" IsReadOnly="True"/>
<DataGridTextColumn Width="Auto" Header="GrnNo" Binding="{Binding GrnNo}"/>
<DataGridCheckBoxColumn Width="Auto" Binding="{Binding Line_Correct}" Header="" >
<DataGridCheckBoxColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown"/>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
<DataGridTextColumn Width="Auto" Header="Comment" Binding="{Binding Comment}"/>
<DataGridTextColumn Width="Auto" Header="PerP" Binding="{Binding OuterUnits}" IsReadOnly="True"/>
</DataGrid.Columns>
<DataGrid.CellStyle >
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsKeyboardFocused" Value="True" >
<Setter Property="Background" Value="White" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightSteelBlue"/>
</DataGrid.Resources>
</DataGrid>
它不使用实体框架跳几行,该数据是一个非常繁忙的虚拟服务器上。
任何人都可以指向某处寻找解决方案或指出我的XAML中的任何问题?
编辑
我开始想,我只是试图让电网做太过分了!
如果关闭每个事件并触发并启用虚拟化,会发生什么情况? – Paparazzi 2011-12-16 14:44:00
它的工作原理如下 – Noelle 2011-12-16 15:50:10
然后每次添加一个触发器和事件以查找违规者。 – Paparazzi 2011-12-16 16:50:56