0

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

这是因为即使在 datagrid 下使用虚拟化 stackpanel 也需要时间来加载(2-3 秒延迟)来加载数据行,因为它有几列并且有些是基于模板的。通过上述行为,延迟将“似乎”减少,从而使 datagrid 感觉它拥有数据并且响应速度足以加载它。

我怎样才能实现它?

谢谢维尼特。

4

1 回答 1

0

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

您最终将使网格显示的数据看起来像这样:

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

MyDataObject 实现了 INotifyPropertyChanged。

在构造函数中,您执行必要的逻辑来计时、安排或解释何时应该读取实际结果。在那之前,您返回相当空的数据... null 和 string.Empty 从您的属性。

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

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

于 2010-05-11T07:53:17.497 回答