加载虚拟化wpf数据网格时的进度条

时间:2013-12-25 10:26:14

标签: wpf wpfdatagrid virtualization

我正在使用普通的WPF DataGrid来显示REST提要中的一些数据。 REST源被分页,其下一个链接包含下一组项的URL。 DataGrid通过具有实现IList接口(而不是IList)的自定义对象进行虚拟化,并且知道如何从REST提要中提取丢失的数据。

问题在于,如果用户立即滚动到底部,则该组件必须为每个“下一页”执行一堆REST请求,从而导致GUI冻结。当然我可以简单地设置一个“等待”屏幕,但我实际上可以显示一个准确的进度条。

为了实现这一点,我在我的应用程序状态栏上有一个进度条,它在数据上下文中设置了IsLoading的可见性,然后将其传递给分页对象。还有另一个属性LoadedPercentage,它显示了已加载了多少所需数据。

问题在于,当我滚动到屏幕的末尾时,它仍会冻结并且不显示任何内容。我在代码中设置了断点,以查看我的属性是否被访问,并且它们都在正确的时间点击并显示正确的值。因此,我从中推断出DataGrid本身在某种程度上阻止了GUI线程在等待IList对象返回请求对象时进行任何绘制。

那么有没有人知道要显示状态栏的解决方案?我真的宁愿显示状态栏并跟踪进度而不是某些“加载请稍候”屏幕。 是否可以使用内置对象完成此操作,还是必须购买某些第三方网格?

编辑:有些人不太清楚,所以我想提一下:我正在进行虚拟化,如here所述。似乎当DataGrid请求特定条目时,它会阻止整个UI绘制,直到请求完成为止。

1 个答案:

答案 0 :(得分:0)

嗯,UI正在忙着从REST服务中获取数据。如果您不喜欢该行为,则可以实施数据虚拟化。

这篇文章解释了更多:WPF Datagrid: Lazy Loading / Inifinite scroll

据我所知,在WPF中没有“准备好”的解决方案,这将是一个小麻烦,但它应该适用于一些调整。

实现您的自定义IList听起来不会起作用,所以我不确定如何“修复”您的解决方案,如果它甚至可能。