我正在为我的网格使用Infragistics XamDataGrid。它绑定到ObservableCollection。
当在窗口的下拉列表中进行选择时,将在后台线程上发出数据请求,并启动加载动画。收到数据后,所有必要的工作都在后台线程上完成。
我面临的问题是,一旦所有数据都准备就绪,我需要更新网格绑定的集合。这需要在UI线程上完成。所以当XamDataGrid在UI线程上处理集合更改时,我的动画会停止动画。
据我所知,我无能为力,因为网格加载和动画都需要在同一个UI线程上进行。
有什么我可能错过的吗?在网格工作以显示新行的同时保持动画运行的一些方法吗?
答案 0 :(得分:1)
我要做的第一件事是弄清楚性能成本在哪里。简化您的UI并使用WPFPerf尝试解决这个问题。例如,您可能会发现网格中的数据模板特别昂贵。
如果仍然存在性能问题,可以将更新批量分组,在自己的调度程序消息中运行每个更新。伪代码:
// running on BG thread
var data = server.GetTheData();
// have the data, so marshal back to the UI thread in batches of 5
foreach (var batch in data.Batch(5))
{
dispatcher.Invoke(..., batch);
}