我通过派生传统的基于takeit的WPF DataGrid来创建自定义DataGrid。我希望网格中的一个功能可以异步地逐个加载项目,其中只要ItemsSource被更改,即一个新的集合被设置为ItemsSource属性,或者绑定的集合被更改为已添加,移动或删除的项目(其中当底层源实现INotifyCollectionChanged(如ObservableCollection)时,通知将进入数据网格。
这是因为即使虚拟化数据网格下面的堆栈面板需要时间加载(2-3秒延迟)来加载数据行,因为它有多个列,有些是基于模板的。由于上述行为,延迟将“显示”为减少给予数据网格感觉它具有数据并且响应足以加载它。
我怎样才能实现它?
THX VINIT。
答案 0 :(得分:0)
听起来像是在寻找data virtualization
',这通常意味着创建一个类似于IList的自定义类型,并做了大量工作来事后补充对象。
您最终会得到网格显示的数据如下所示:
Index 0: new MyDataObject(0);
Index 1: new MyDataObject(1);
MyDataObject实现了INotifyPropertyChanged。
在构造函数中,您可以执行必要的逻辑,以便在读取实际结果时进行计时,计划或解释。在此之前,您将从属性返回相当空的数据... null和string.Empty。
然后,一旦数据变得可用(理想情况下在后台线程中,从任何地方读取 - 您自己的本地数据,或数据库或Web服务),那么您可以更新真实的基础属性值并触发属性更改通知,以便然后,UI被正确加载。
这有点太复杂了,不能跳进去,所以一些搜索会有所帮助。希望这能让你开始。