在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();
}
检查具有给定键的项是否已经存在,并更新其属性,而不是完全切换出所有项。
(就性能而言,这也是一个好主意,您当前的逻辑需要完全重新创建数据网格内容。)
在实际应用程序中,您是否以流式方式从队列服务中获取数据?
我之所以这么问,是因为你不能直接更新/插入来避免这种情况吗?
如果没有,你可以试试这样的方法:在WPF中,什么等效于Windows窗体中的Suspend/ResumeeLayout()和BackgroundWorker()