当我第一次将数据加载到Silverlight DataGrid控件中时,如何使屏幕看起来就像用户刚刚单击第一列的标题一样?换句话说,数据应按照该列的值按升序排序,并且小排序箭头应显示在第一列的标题中。
假设可能,我是否也可以看起来好像用户点击了第一列然后按住键点击第二列?换句话说,我可以以编程方式应用两部分排序并让屏幕看起来好像用户已经完成了吗?
答案 0 :(得分:10)
这是我的解决方案:
if (pcv.CanSort == true)
{
pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}
,其中pcv是PageCollectionView。这首先按ProductionStatus属性排序,然后按 日期属性。它只显示第二列的小排序箭头。
答案 1 :(得分:6)
我也需要这样做,并且很难深入了解DataGrid是否可以做到这一点。
事实上,DataGridColumnHeader类上有一个合适的方法,即InvokeProcessSort,但它是内部的,而不是在DataGrid类中的任何其他位置浮出水面。
我所能做的就是在绑定之前对数据进行预排序。我正在使用一个实现ICollectionView以及ObservableCollection<>的自定义数据集合,这可以正常工作 - 但它不是最佳的,并且不一定需要大量的工作。
此外,提供预先排序的集合意味着网格不显示排序标记。
我会在DataGrid错误跟踪器上提出这个问题 - 这是一个相当重要的遗漏,很容易修复 - MS只需要在DataGridColumn和DataGrid类上公开适当的方法。
答案 2 :(得分:4)
Paul Sherrif发现了一篇很好的小文章,为我们解决了这个问题......
http://weblogs.asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx
基本上我们无论如何都要将DataGrid绑定到CollectionViewSource。事实证明这有一个CollectionViewSource.SortDescriptions配置集,让我们指定默认的排序顺序。
谢谢保罗!
答案 3 :(得分:1)
只需将SortDescriptor添加到DomainDataSource:
<riaControls:DomainDataSource.SortDescriptors>
<riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>
答案 4 :(得分:0)
Silverlight 3 +中存在CollectionViewSource
http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx
有一种简单的方法可以在XAML中定义默认排序顺序,如Microsoft所建议的那样:
使用CollectionViewSource
声明标记中的排序 <Window.Resources>
<app:MyData x:Key="MyData"/>
<CollectionViewSource x:Key="cvs" Source={StaticResource MyData}>
<CollectionViewSource.SortDescriptions>
<SortDescription Property="Name"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/>
中的评论中找到
我对微软的样本进行了更正
<sort:SortDescription
PropertyName="Name"
Direction="Ascending"
xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
/>