2010-12-09 50 views
1

我已经重写ListCollectionView来延迟加载只显示所需的项目。覆盖WPF中的排序DataGrid/ListCollectionView

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

这很好,就像它应该。

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

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

相反,我想获取通知,并告诉我的(远程)数据源将相应的项目预先分类。

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

+0

..正如我在你创建的其他主题中所说:我想,你需要探索[ListCollectionView](http://msdn.microsoft.com/en-us/library/system.windows.data.listcollectionview_properties。首先,因为它适合大多数场景,程序员通常希望在他们的应用程序中实现。最有可能的是,你不需要派生这个类来进行延迟加载。您可以使用Filter来代替,并且还有其他方法可以执行延迟加载,而无需派生类。 – Nawaz 2010-12-09 17:37:49

+0

从云服务加载400000项目来做客户端上的过滤并不是真正的解决方案,我可能与之合作:) – Sam 2010-12-10 11:29:37

回答

0

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

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

在此方法中,你可以调用WCF服务,并返回一个排序和被截断的列表。 这个库不容易理解,但它的工作原理。