установить начальный порядок сортировки в Silverlight DataGrid? - PullRequest
12 голосов
/ 22 октября 2008

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

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

Ответы [ 5 ]

10 голосов
/ 13 декабря 2010

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

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

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

6 голосов
/ 23 января 2009

Мне тоже нужно было это сделать, и я тщательно и тщательно изучил, может ли DataGrid сделать это.

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

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

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

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

4 голосов
/ 28 сентября 2011

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

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

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

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

1 голос
/ 21 января 2013

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

<riaControls:DomainDataSource.SortDescriptors>
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>
0 голосов
/ 18 июля 2014

Существует SilverViewSource в 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"
   /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...