Подтвердить что ты не робот

Установить начальный порядок сортировки в Silverlight DataGrid?

Когда я впервые загружаю данные в элемент управления Silverlight DataGrid, как я могу заставить экран выглядеть так, как если бы пользователь только что нажал на заголовок первого столбца? Другими словами, данные должны сортироваться в порядке возрастания в соответствии с этими значениями столбца. И маленькая стрелка сортировки должна отображаться в заголовке первого столбца.

Предполагая, что это возможно, могу ли я также заставить его выглядеть так, как если бы пользователь нажал на первый столбец, а затем щелкнул вторым? Другими словами, могу ли я программно применить сортировку из двух частей и посмотреть на экран так, как будто пользователь сделал это?

4b9b3361

Ответ 1

Мне тоже нужно было это сделать, и я усердно и глубоко посмотрел, может ли DataGrid это сделать.

На самом деле это соответствующий метод в классе DataGridColumnHeader, а именно InvokeProcessSort, но он внутренне и не отображается нигде в классах DataGrid.

Все, что мне удалось сделать, это предварительно отсортировать данные перед привязкой. Я использую пользовательский сбор данных, который реализует ICollectionView, а также ObservableCollection < > , и это работает нормально - но это не оптимально, и работа, которая не обязательно необходима.

Кроме того, предоставление предварительно отсортированной коллекции означает, что сетка не отображает маркер сортировки.

Я расскажу об этом как о проблеме с ошибкой DataGrid - это довольно серьезное упущение, которое было бы довольно легко исправить - MS просто нужно выставить соответствующие методы в классах DataGridColumn и DataGrid.

Ответ 2

Это было мое решение:

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

где pcv - это PageCollectionView. Сначала это происходит по свойству ProductionStatus, а затем по Дата. Он отображает небольшую стрелку сортировки только для второго столбца.

Ответ 3

Нашел хорошую небольшую статью Пола Шеррифа, которая решила это для нас...

http://weblogs.asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx

В принципе, мы все равно привязывали DataGrid к CollectionViewSource. Оказывается, это набор SetViewSource.SortDescriptions, который позволяет указать порядок сортировки по умолчанию.

Спасибо, Пол!

Ответ 4

Просто добавьте SortDescriptor в DomainDataSource:

<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>

Ответ 5

Существует файл CollectionViewSource в Silverlight 3 +

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