【问题标题】:Override sorting in WPF DataGrid / ListCollectionView覆盖 WPF DataGrid / ListCollectionView 中的排序
【发布时间】:2010-12-09 15:37:22
【问题描述】:

我重写了 ListCollectionView 以仅延迟加载显示所需的项目。

我在 DataGrid 中使用这个 ListCollectionView 来显示和编辑项目。

这很好用,就像它应该的那样。

我的问题:我希望用户能够通过单击标题列对 DataGrid 进行排序。由于我仅在需要时才延迟加载项目,因此 ListCollectionView 在对尚未加载的项目进行排序方面做得不好。

解决此问题的一种方法是加载所有项目,但我不想这样做,因为这可能会在可观的时间内加载太多项目。

相反,我想收到通知并告诉我的(远程)数据源将预先排序的项目交给我。

有没有一种简单的方法可以拦截 DataGrid 或(更好的)ListCollectionView 中的排序并自己做,不知何故?

【问题讨论】:

  • .. 正如我在您创建的其他主题中所说:我认为,您需要先探索ListCollectionView,因为它能够适应程序员通常希望在其应用程序中实现的大多数场景。最有可能的是,您不需要派生此类来执行延迟加载。您可以改用过滤器,还有其他方法可以进行延迟加载,而无需派生类。
  • 从云服务加载 400000 个项目以在客户端上进行过滤并不是我可以使用的解决方案 :)
  • 但是你可能是对的,我需要更多关于 ListCollectionView 的信息 - 我愿意提供任何信息或解释它的体面来源,到目前为止我没有运气,这就是我问的原因。

标签: wpf sorting datagrid listcollectionview


【解决方案1】:

如果您需要数据虚拟化,codeplex 上有一个专门的库。 您所要做的就是实现以下方法:

public IList<T> LoadRange(int startIndex, int count, 
                SortDescriptionCollection sortDescriptions, out int overallCount)

在此方法中,您可以调用 WCF 服务并返回已排序和截断的列表。 这个库不容易理解,但它确实有效。

【讨论】:

  • 如果排序顺序发生变化,我宁愿知道如何获得通知。
  • 这不是几句话就能解释的问题。一般来说,一个序列由以下步骤组成:以回调函数为参数构造 CollectionView -> 处理 ListViewHeader 点击事件 -> 在处理程序中获取 CollectionView 并调用 Refresh 方法 -> 在刷新方法中调用回调函数并执行某些操作带有内部列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2019-06-09
相关资源
最近更新 更多