Предварительная сортировка Silverlight DataGrid в MVVM - PullRequest
0 голосов
/ 24 ноября 2011

Я перевожу DataGrid на ObservableCollection Я обновляю коллекцию по таймеру и обновлениям сетки, что мне и нужно.

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

Я хотел бы "принудительно" сортировать сетку по конкретному столбцу при его инициализации. Это может быть сделано в XAML или как-то в манере MVVM?

EDIT Просто чтобы дать больше деталей. Это главный экран почтового клиента. У меня есть служба, которая опрашивает данные, и если приходит новая почта - она ​​добавляется в коллекцию. Сортировка на этом этапе нежелательна по нескольким причинам. Во-первых, это список object. Во-вторых, пользователь может решить отсортировать по другому столбцу, используя DataGrid

Правильно установить сетку для сортировки по столбцу, который я изначально хочу (полученное время), и разрешить пользователям сортировать по любому столбцу, сохраняя этот порядок при поступлении новых элементов.

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011

Вы должны обернуть свою ObservableCollection в представление коллекции. Обычно вы оборачиваете коллекцию либо в CollectionViewSource, либо в PagedCollectionView. CollectionViewSource может декларативно использоваться в XAML, но не может управляться из ViewModel. Однако вы можете обернуть свою коллекцию в PagedCollectionView и выставить ее из вашей ViewModel. Эта статья MSDN должна помочь вам: http://msdn.microsoft.com/en-us/library/dd833072(v=vs.95).aspx. Представления коллекций являются очень мощными инструментами и помогут вам элегантно преодолеть разрыв между View и ViewModel. Надеюсь, это поможет.

1 голос
/ 28 ноября 2011

[Изменить] Отредактировал ответ, чтобы соответствовать решению

Вы можете попробовать добавить SortDescription, включив Collection в collectionView.В примере.

<CollectionViewSource Source="{Binding ObservableCollection}" x:Key="Data" >
    <CollectionViewSource.SortDescriptions> 
       <scm:SortDescription PropertyName="City" />
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource>

Затем в вашем ItemsSource установите следующую привязку.

ItemsSource={Binding Source={StaticResource Data}}
0 голосов
/ 24 ноября 2011

Просто сортируйте внутри вашей ViewModel, где бы вы ни обновляли коллекцию по таймеру, сортируйте ее. Фактически, когда вы сортируете коллекцию, представление должно перепривязываться, если вы правильно привязываете в View / Xaml к текстовому тексту (модели представления).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...