2008-10-22 2 views
12

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

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

ответ

6

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

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

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

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

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

+0

не Гадать нет обновления на это еще? – Coops

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. Он отображает стрелку небольшого сортировки только для второго столбца.

+0

Это тоже помогло мне, спасибо! – Masha

+0

Я думаю, что это было удалено из Silverlight 4 –

+0

Я тоже использовал его с SL4. – Valentin

4

Нашли хорошую маленькую статью Пола Sherrif, что решить это для нас ...

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

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

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

1

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

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

Там существует 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" 
    />