gpt4 book ai didi

c# - 数据网格分组带来更好的性能

转载 作者:行者123 更新时间:2023-12-02 21:30:35 24 4
gpt4 key购买 nike

我有一个 DataGrid,我将其与 ICollectionView 一起使用来对大型集合(在某些情况下超过 20k 行)中的项目进行分组。我以前曾使用过这种方法,并通过显示所有行或虚拟化来创建响应速度更快的页面,并取得了不同程度的成功。在这种情况下,我想尽可能地虚拟化以保持 UI 的响应能力。我使用了这个答案中的提示,但对我的问题收效甚微。 Helpful DataGrid Link

我的主要问题是在将数据加载到 ICollectionView View /源中时 DataGrid 上有几秒钟的延迟,我希望通过适当的虚拟化将其最小化。这是我的一些代码:

<DataGrid Margin="0,2,0,0" IsReadOnly="True" ItemsSource="{Binding DataView,IsAsync =True}" EnableRowVirtualization ="True" MaxWidth="2560" MaxHeight="1600"
Grid.Row="2" SelectionMode="Extended" VirtualizingPanel.IsVirtualizingWhenGrouping="True" SelectionUnit="FullRow" SelectedItem="{Binding SelectedOutage}">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="0,0,0,5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True" Foreground="{StaticResource Foreground}" Background="{StaticResource AlternatingBackground}">
<Expander.Header>
<TextBlock Text="{Binding Name}" Margin="5,0,0,0" Width="300"/>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<!--Follows are DataGrid.ContextMenu and DataGridTextColumns with fixed widths-->
</DataGrid>

和 C# 项目:

public ICollectionView DataView { get; set; }
private readonly ObservableCollection<EquipmentMonitorRow> equipment = new ObservableCollection<EquipmentMonitorRow>();

DataView = CollectionViewSource.GetDefaultView(equipment);
DataView.GroupDescriptions.Add(new PropertyGroupDescription("GroupName"));

equipment.Clear();
//Lag is during this item adding.
equipment.AddRange(data);

所以希望我缺少一些虚拟化,或者也许我可以以不同的方式添加项目或其他东西。任何帮助,将不胜感激。谢谢。

最佳答案

将 ObservableCollection 源更改为 List 源解决了初始加载滞后问题。

private readonly List<EquipmentMonitorRow> equipment = new List<EquipmentMonitorRow>();

还结合使用 VirtualizingPanel 属性,我实现了最佳虚拟化。具体来说,如果我省略了 VirtualizingPanel.IsVirtualizingWhenGrouping="True",那么应用程序会延迟近一分钟,然后才能在 DataGrid 中显示任何内容。在没有虚拟化的情况下,滚动效果要好得多,但在我的情况下,初始负载是 Not Acceptable 。

VirtualizingPanel.IsVirtualizingWhenGrouping="True" VirtualizingPanel.ScrollUnit ="Item" VirtualizingPanel.VirtualizationMode="Recycling"

感谢您的帮助。

关于c# - 数据网格分组带来更好的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com