установить начальный порядок сортировки в Silverlight DataGrid?
-
03-07-2019 - |
Вопрос
Когда я впервые загружаю данные в элемент управления Silverlight DataGrid, как я могу сделать экран точно таким же, как если бы пользователь только что щелкнул заголовок первого столбца? Другими словами, данные должны быть отсортированы в порядке возрастания в соответствии со значениями этого столбца, И маленькая стрелка сортировки должна отображаться в заголовке первого столбца.
Предполагая, что это возможно, могу ли я сделать так, чтобы пользователь щелкнул первый столбец, а затем щелкнул по второму? Другими словами, могу ли я программно применить сортировку из двух частей, чтобы экран выглядел так, как будто это сделал пользователь?
Решение
Мне тоже нужно было это сделать, и я тщательно и тщательно изучил, может ли DataGrid сделать это.
На самом деле в классе DataGridColumnHeader есть соответствующий метод, а именно InvokeProcessSort, но он внутренний и не обнаружен где-либо еще в классах DataGrid.
Все, что мне удалось сделать, - это предварительно отсортировать данные непосредственно перед их привязкой. Я использую пользовательский сбор данных, который реализует ICollectionView, а также ObservableCollection & Lt; & Gt;, и это работает хорошо - но это не оптимально, и нагрузка на работу не обязательна.
Кроме того, предоставление предварительно отсортированной коллекции означает, что сетка не показывает маркер сортировки.
Я расскажу об этом как о проблеме с отслеживателем ошибок DataGrid - это довольно серьезное упущение, которое было бы довольно легко исправить - MS просто нужно предоставить соответствующие методы для классов DataGridColumn и DataGrid.
Другие советы
Это было мое решение:
if (pcv.CanSort == true)
{
pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending));
pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending));
}
, где pcv - это PageCollectionView. Это сортируется сначала по свойству ProductionStatus, а затем по Дата собственности. Она отображает маленькую стрелку сортировки только для второго столбца.
Нашел хорошую небольшую статью Пола Шеррифа, которая решила это для нас ...
http: // weblogs. asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx р>
По сути, мы все равно привязывали DataGrid к CollectionViewSource. Оказывается, у этого есть набор конфигурации CollectionViewSource.SortDescription, который позволяет нам определять порядок сортировки по умолчанию.
Спасибо, Пол!
Просто добавьте SortDescriptor в DomainDataSource:
<riaControls:DomainDataSource.SortDescriptors>
<riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" />
</riaControls:DomainDataSource.SortDescriptors>
В 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"
/>