在Silverlight DataGrid中设置初始排序顺序?

12

当我第一次将数据加载到Silverlight DataGrid控件中时,如何使屏幕看起来恰好就像用户刚刚单击了第一列的标题一样?换句话说,根据该列的值,数据应按升序排序,并且排序箭头应显示在第一列的标题中。

假设这是可能的,那么我还可以使它看起来像用户已单击第一列,然后再用Shift键单击第二列吗?换句话说,我是否可以以编程方式应用两部分排序,并使屏幕看起来像用户已经执行了此操作?

5个回答

10

这是我的解决方案:

if (pcv.CanSort == true)
{
      pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
      pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}

其中pcv是一个PageCollectionView。它首先按ProductionStatus属性排序,然后再按Date属性排序。但它仅为第二列显示小的排序箭头。


我认为这个在Silverlight 4中被移除了。 - Brandon Boone

6

我也需要这样做,并且仔细研究了DataGrid是否能够实现此功能。

实际上,DataGridColumnHeader类中有一种适当的方法,即InvokeProcessSort,但它是内部的,没有在DataGrid类中公开。

我所能做的就是在绑定数据之前对数据进行预排序。我使用了一个自定义数据集合,它实现了ICollectionView以及ObservableCollection<>,这个方法可以正常工作,但不是最佳选择,而且需要大量的工作。

另外,提供一个预排序的集合意味着网格不会显示排序标记。

我将在DataGrid错误跟踪器上提出此问题 - 这是一个相当重要的遗漏,很容易修复 - 微软只需要在DataGridColumn和DataGrid类中公开适当的方法即可。


4

1
只需将SortDescriptor添加到DomainDataSource即可:
<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>

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}}"/> 

https://connect.microsoft.com/VisualStudio/feedback/details/678782/set-default-sort-order-of-datagrid的评论中发现:

我对Microsoft示例的更正:

 <sort:SortDescription 
   PropertyName="Name"
   Direction="Ascending"
   xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows"
   /> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接