【发布时间】:2018-10-04 10:03:05
【问题描述】:
每个人。我正在使用 WPF 并尝试异步填充数据网格,因此它不会锁定 UI。 我正在以异步方式从 DB 加载数据,但是如果我有很多记录,那么 UI 会被锁定,直到它完成填充 Datagrid。我几乎尝试了所有方法,但没有任何效果。
这是我的 xaml 代码:
<DataGrid x:Name="dgOrgAtts" HorizontalAlignment="Left" Height="400" Margin="195,172,0,0" VerticalAlignment="Top" Width="419" RenderTransformOrigin="0.051,-0.272" CanUserReorderColumns="False" CanUserResizeRows="False" IsEnabled="False" AutoGenerateColumns="False" EnableColumnVirtualization="False" EnableRowVirtualization="False" CanUserSortColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Mode=OneWay}" CanUserResize="False" Width="30" >
<DataGridCheckBoxColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Checked="all_Checked" Unchecked="all_Unchecked" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridCheckBoxColumn.HeaderTemplate>
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</DataGridCheckBoxColumn.ElementStyle>
<DataGridCheckBoxColumn.CellStyle>
<Style>
<EventSetter Handler="OrgAtt_Checked" Event="ToggleButton.Checked"/>
<EventSetter Handler="OrgAtt_Unchecked" Event="ToggleButton.Unchecked"/>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
<DataGridTextColumn Binding="{Binding AttName, Mode=OneWay, IsAsync=True}" ClipboardContentBinding="{x:Null}" Header="סוג קבוצת שיוך" CanUserSort="False" CanUserReorder="False" Width="Auto"/>
<DataGridTextColumn Binding="{Binding AttText, Mode=OneWay, IsAsync=True}" ClipboardContentBinding="{x:Null}" Header="שם קבוצת שיוך" CanUserSort="False" CanUserReorder="False" Width="Auto"/>
<DataGridTextColumn Binding="{Binding OrgAttId, Mode=OneWay, IsAsync=True}" ClipboardContentBinding="{x:Null}" Header="מספר" Width="*"/>
</DataGrid.Columns>
</DataGrid>
这就是我将列表绑定到数据网格的方式:
Binding binding = new Binding();
binding.Source = orgAtt;
binding.IsAsync = true;
dgOrgAtts.SetBinding(DataGrid.ItemsSourceProperty, binding);
它可以工作,但锁定 UI。 我想得到你的帮助。
【问题讨论】:
-
你告诉我们你已经尝试了很多东西。你可以说得更详细点吗?您究竟尝试过什么?
-
不要禁用行虚拟化。这导致 DataGrid 创建 很多 行 - 这很慢
-
@ASh 谢谢!现在从 40 秒缩短到 1 秒!
标签: c# wpf asynchronous datagrid