2013-07-19 2 views
0

У меня есть dataGrid в приложении wpf, использующем шаблон MVVM.Кто несет ответственность за сортировку элементов в шаблоне MVVM и DataGrid?

DataGrid может сортировать строку, если я нажимаю на имя столбца, и я могу упорядочить по многим столбцам, если я использую клавишу shift. Таким образом, контроль дает все, что мне нужно.

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

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

In this post Кажется, что одним из решений является использование CollectionViewSource, но если я не ошибаюсь, в этом случае мне нужно реализовать в моей модели представления весь код для сортировки элементов, поэтому это больше кода, когда dataGrid делает это Работа.

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

Как я могу решить эту проблему?

ответ

1

Когда я помещать данные в любой контроль сбора в WPF (с помощью MVVM), я всегда связывается со свойством коллекции ItemsSource, а также в SelectedItem или SelectedItems свойствами, в зависимости от SelectionMode контроля.

Это позволяет мне узнать, какой товар (-ы) выбран/выбран и, чтобы выбрать какой-либо элемент (данные). Я хочу, чтобы его выбирали из модели просмотра.

Если заказ, который пользователь устанавливает в DataGrid, важен, то я бы выполнил сортировку из модели просмотра, но если это важно для пользователя во время работы, то вы можете просто проигнорировать заказ .. Помните, что вы можете получить доступ к выбранному элементу через связанное свойство SelectedItem в вашей модели.

+0

Да, я использую для работы как вы, с SelectedItems, но в этом случае я хочу выбрать элемент в модели представления, а затем в dataGrid, чтобы прокрутить выбранный элемент. Если у меня много строк в dataGrid, я не хочу, чтобы пользователь прокручивал выбранный элемент, мне бы хотелось, чтобы это было автоматически. –

+0

Я могу прокручивать автоматически, но тогда выбранный элемент в datagrid не синхронизируется с выбранным элементом в моей модели просмотра. –

+0

Это правильный путь ... Вы можете автоматически прокручивать выбранный элемент с помощью 'Attached Properties', не теряя выбранный элемент. Есть много примеров этого онлайн, если вы ищете. – Sheridan

Смежные вопросы