2010-05-06 89 views
0

我正在通过派生传统的基于抽象的WPF DataGrid创建自定义DataGrid。我希望网格中的一个功能异步加载项目,其中一旦ItemsSource被更改,即一个新的集合被设置为ItemsSource属性或绑定的集合被更改为rae添加,移动或删除的项目的费用(其中当基础源实现INotifyCollectionChanged(如ObservableCollection)时,通知将进入数据网格。ItemsControl逐个加载项目异步

这是因为即使虚拟化数据网格下方的堆栈面板需要花费时间(2-3秒延迟)来加载数据行时,它有几列,有些是基于模板的。通过上述行为,延迟会“出现”减少给予datagrid一种感觉,它具有数据并且足够响应以加载它。

我该如何实现它?

Thx Vinit。

回答

0

听起来像你正在寻找data virtualization',这通常意味着创建自己的类似于IList的自定义类型,并做了大量工作来事后水合物体。

你最终将具有网格显示这个样子的东西你的数据:

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

而且MyDataObject实现INotifyPropertyChanged。

在构造函数中,您需要对读取真实结果时所需的逻辑进行计时,调度或解释。在此之前,您会返回空的数据... null和string.Empty从属性中返回。然后,一旦数据变得可用(理想情况下在后台线程中,从任何地方读取 - 您自己的本地数据,或数据库或Web服务),然后您可以更新实际的基础属性值并激发属性更改通知这样UI才能正确加载。

这太复杂了,只是跳到,所以一些搜索将有所帮助。希望这会让你开始。