在DataGrid中重新引用数据太“麻烦”了;闪光”;

本文关键字:麻烦 闪光 数据 DataGrid 新引用 引用 | 更新日期: 2023-09-27 17:58:30

我在DispatcherTimer中有一个方法,它每3秒刷新一次数据网格的数据。(3秒用于测试)

问题是,每次刷新我的数据网格时,它都会清除所有数据,然后从我的数据库中再次加载数据(显然)。现在我的问题是,每次加载数据时,它都会产生这种"华而不实"的效果,因为所有的行都被清除并重新加载到数据网格中。

所以我的问题是,(在你看了我下面的代码之后)有没有更好的方法可以一次又一次地加载数据,而不会在我的数据网格中产生闪烁效果?

我从WCF服务调用数据的方法:

public async Task LoadTrucks()
{
    using (TruckServiceClient service = new TruckServiceClient())
    {
        List<ClientItems> truckitems = new List<ClientItems>();
        if (dgViewProjects.Items.Count <= 0)
        {
            foreach (var item in await service.GetTrucksAsync())
            {
                truckitems.Add(new ClientItems
                {
                    TruckQuoteId = item.QuoteId,
                    TruckChassisManufacturer = item.ChassisManufacturer,
                    TruckChassisModel = item.ChassisModel,
                    TruckStatus = item.Status,
                    TruckJobNumber = item.JobNumbers,
                    TruckAddedBy = item.AddedBy,
                    TruckClient = item.ClientName
                });
            }
        }
        dgViewProjects.ItemsSource = (truckitems.ToArray());
    }
}

在这里,我调用LoadTrucks()方法并创建DispatcherTimer:

private async void dgViewProjects_Loaded(object sender, RoutedEventArgs e)
{
    await LoadTrucks();
    var timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromSeconds(3);
    timer.Tick += new EventHandler(async (object o, EventArgs t) =>
    {
        dgViewProjects.ItemsSource = null;
        await LoadTrucks();
    });
    timer.Start();
}

在DataGrid中重新引用数据太“麻烦”了;闪光”;

检查具有给定键的项是否已经存在,并更新其属性,而不是完全切换出所有项。

(就性能而言,这也是一个好主意,您当前的逻辑需要完全重新创建数据网格内容。)

在实际应用程序中,您是否以流式方式从队列服务中获取数据?

我之所以这么问,是因为你不能直接更新/插入来避免这种情况吗?

如果没有,你可以试试这样的方法:在WPF中,什么等效于Windows窗体中的Suspend/ResumeeLayout()和BackgroundWorker()