ItemsControl以异步方式逐个加载项目

时间:2010-05-06 09:15:09

标签: wpf datagrid asynchronous items

我通过派生传统的基于takeit的WPF DataGrid来创建自定义DataGrid。我希望网格中的一个功能可以异步地逐个加载项目,其中只要ItemsSource被更改,即一个新的集合被设置为ItemsSource属性,或者绑定的集合被更改为已添加,移动或删除的项目(其中当底层源实现INotifyCollectionChanged(如ObservableCollection)时,通知将进入数据网格。

这是因为即使虚拟化数据网格下面的堆栈面板需要时间加载(2-3秒延迟)来加载数据行,因为它有多个列,有些是基于模板的。由于上述行为,延迟将“显示”为减少给予数据网格感觉它具有数据并且响应足以加载它。

我怎样才能实现它?

THX VINIT。

1 个答案:

答案 0 :(得分:0)

听起来像是在寻找data virtualization',这通常意味着创建一个类似于IList的自定义类型,并做了大量工作来事后补充对象。

您最终会得到网格显示的数据如下所示:

Index 0: new MyDataObject(0);
Index 1: new MyDataObject(1);

MyDataObject实现了INotifyPropertyChanged。

在构造函数中,您可以执行必要的逻辑,以便在读取实际结果时进行计时,计划或解释。在此之前,您将从属性返回相当空的数据... null和string.Empty。

然后,一旦数据变得可用(理想情况下在后台线程中,从任何地方读取 - 您自己的本地数据,或数据库或Web服务),那么您可以更新真实的基础属性值并触发属性更改通知,以便然后,UI被正确加载。

这有点太复杂了,不能跳进去,所以一些搜索会有所帮助。希望这能让你开始。