Переопределить сортировку в WPF DataGrid / ListCollectionView

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

Я использую этот ListCollectionView в DataGrid для отображения и редактирования элементов.

Это работает хорошо, так же, как и должно.

Моя проблема: я хочу, чтобы пользователь мог сортировать DataGrid, нажав на заголовок столбца. Поскольку я лениво загружаю элементы только тогда, когда они мне нужны, ListCollectionView плохо выполняет сортировку тех элементов, которые еще не были загружены.

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

Вместо этого я хотел бы получить уведомление и сказать моему (удаленному) источнику данных передать мне предварительно отсортированные элементы.

Есть ли простой способ перехватить сортировку в DataGrid или (лучше) ListCollectionView и сделать это самостоятельно, как-нибудь?

1 ответ

Если вам нужна виртуализация данных, в codeplex есть специальная библиотека для этого. Все, что вам нужно сделать, это реализовать следующий метод:

public IList<T> LoadRange(int startIndex, int count, 
                SortDescriptionCollection sortDescriptions, out int overallCount)

Внутри этого метода вы можете вызвать WCF-сервис и вернуть отсортированный и усеченный список. Эта библиотека не легка для понимания, но она работает.

Другие вопросы по тегам