我可以检测在Silverlight中排序的datagrid列吗?

时间:2009-02-24 09:26:06

标签: silverlight sorting datagrid

我需要能够从成千上万的可能结果中将一页结果加载到网格中。我希望从服务器获取50页的数据,使用SQL Server对数据进行排序,然后再返回数据绑定到datagrid。当用户通过单击列标题对数据网格中的dta进行排序时,我需要检测这个并在返回数据库之前确定新的顺序。

2 个答案:

答案 0 :(得分:0)

我认为没有办法向datagrid询问它的排序列。但是看http://blogs.msdn.com/scmorris/archive/2008/06/10/sorting-data-in-the-silverlight-datagrid.aspx我发现你可以在项目上实现ICollectionView时实现自己的排序。

所以你可以在结果上实现ICollectionView(包装)吗?

如果你将ItemSource设置为IList,Datagrid会在内部执行此操作,那么也许您可以查看它的实现以了解它们是如何做到的? (请参阅使用反射器的Datagrids内部类ListCollectionView)

当你有ICollectionView时,你可以使用它的SortDescriptions找出当前的排序。

我希望这能帮助你朝着正确的方向前进吗?

Tjipke

答案 1 :(得分:0)

您可以使用PagedCollectionView并将SortDescriptions属性转换为INotifyCollectionChanged。然后,您收听CollectionChanged事件。像这样:

var collectionView = new PagedCollectionView(items);
(collectionView.SortDescriptions as INotifyCollectionChanged).CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) =>
{
  // This gets fired multiple times based on the previous sort and new sort
};
dataGrid.ItemsSource = collectionView;