Сортировка данных по сетке - PullRequest
2 голосов
/ 05 марта 2012

Метод, который я давно использовал для сортировки в WPF, - это создание CollectionViewSource и указание SortDescription, например,

<Window.Resources>
    <CollectionViewSource x:Key="testView">
        <CollectionViewSource.SortDescriptions>
            <cm:SortDescription PropertyName="FirstName" Direction="Descending"></cm:SortDescription>
            <cm:SortDescription PropertyName="FamilyName"></cm:SortDescription>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

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

http://www.mikesdriveway.com/misc/GridSortIssue.zip

Чтобы проверить эту проблему, запустите проект и нажмите кнопку Обновить данные.Обратите внимание, что порядок предметов меняется.Это происходит только один раз, чтобы снова протестировать, остановить и снова запустить проект.Теперь удалите ItemsSource из DataGrid и снова запустите проект.На этот раз, когда вы нажимаете кнопку Обновить данные, ничего не происходит, это означает, что сортировка остается прежней.Каким-то образом сетка убивает сортировку в CollectionViewSource.Это ошибка?

Приветствия, Майкл

1 Ответ

2 голосов
/ 05 марта 2012

Это довольно странно, из того, что я могу сказать, SortDescription базового View очищается при смене источника, поэтому, если SortDescriptions CVS не будут повторно применены, сортировки не будет больше.

Одним из обходных путей может быть «сброс» SortDescriptions:

var cvs = (CollectionViewSource)Resources["testView"];
var descriptions = cvs.SortDescriptions.ToArray();
cvs.SortDescriptions.Clear();
foreach (var descripton in descriptions) cvs.SortDescriptions.Add(descripton);
...