当我第一次将数据加载到Silverlight DataGrid控件中时,如何使屏幕看起来就像用户刚刚单击第一列的标题一样?换句话说,数据应根据该列的值按升序排序,并且小排序箭头应显示在第一列的标题中.
假设这是可能的,我是否也可以看起来好像用户点击了第一列然后按住键点击第二列?换句话说,我可以以编程方式应用两部分排序并使屏幕看起来好像用户已经完成了吗?
这是我的解决方案:
if (pcv.CanSort == true) { pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending)); pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending)); }
,其中pcv是一个PageCollectionView.这首先按ProductionStatus属性排序,然后按Date属性排序.它仅显示第二列的小排序箭头.
我也需要这样做,并且仔细观察DataGrid是否能够做到这一点.
实际上在DataGridColumnHeader类上有一个适当的方法,即InvokeProcessSort,但它是内部的,而不是在DataGrid类中的任何其他位置浮出水面.
我所能做的就是在绑定之前对数据进行预排序.我正在使用一个实现ICollectionView以及ObservableCollection <>的自定义数据集合,这样可以正常工作 - 但它不是最优的,并且不一定需要大量的工作.
此外,提供预先排序的集合意味着网格不显示排序标记.
我将此作为DataGrid错误跟踪器的一个问题提出 - 这是一个相当重要的遗漏,很容易修复 - MS只需要在DataGridColumn和DataGrid类上公开适当的方法.