Установить начальный порядок сортировки в Silverlight DataGrid?
Когда я впервые загружаю данные в элемент управления Silverlight DataGrid, как я могу заставить экран выглядеть так, как если бы пользователь только что нажал на заголовок первого столбца? Другими словами, данные должны сортироваться в порядке возрастания в соответствии с этими значениями столбца. И маленькая стрелка сортировки должна отображаться в заголовке первого столбца.
Предполагая, что это возможно, могу ли я также заставить его выглядеть так, как если бы пользователь нажал на первый столбец, а затем щелкнул вторым? Другими словами, могу ли я программно применить сортировку из двух частей и посмотреть на экран так, как будто пользователь сделал это?
Ответы
Ответ 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"
/>