Microsoft предлагает вот такой код для сортировки:
Тут сразу несколько проблем.
Первая:
var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;
Тут columnBinding всегда равно null. По-этому, для сортировки берётся не имя привязки, а имя столбца. Если эти значения не совпадают - куча ошибок в консоли (потому что в модели нет свойства с таким именем). Хотя в XAML атрибут DisplayMemberBinding прописан. Что ещё нужно?
Другие проблемы пока не скажу. Возможно, они сами решатся, когда решится эта.
Сейчас подумал. Может это потому что ItemsSource присваивается в коде, а не в XAML Но как по-другому - я не знаю
Вижу, ответов нет Тогда вот остальные проблемы:
2) Если сортировка всё-таки произошла, то новые элементы будут добавляться несортированно. Либо в начало, либо в конец списка (зависит от порядка сортировки). Получается, что при добавлении нового элемента надо снова вызывать метод Sort().
3) Данный способ сортировки использует метод dataView.Refresh(). А это значит, что при добавлении новых элементов (если их каждый раз сортировать) перемещаться по списку клавиатурой будет невозможно (как я описывал в одной из предыдущих тем).
То есть, свойство DisplayMemberBinding прописано не у всех. Сортировка нормально работает только для тех столбцов, где оно прописано. Остальные глючат.
Как тогда быть? Нельзя же сделать привязку в GridViewColumn, если она нужна в его дочернем компоненте
Мне потом ещё группировка понадобится. Типа как здесь:
Я думал, WPF всё это умеет искаропки.
А оказалось, они даже встроенный NumericUpDown до сих пор не написали, Карл! На каждый чих нужна какая-нибудь библиотека от энтузиазных энтузиастов.
Заменил ListView на DataGrid. Сортировка работает только для столбцов с атрибутом Binding. У DataGridTemplateColumn этого атрибута нет. Он даже на мышку не реагирует. Как в майкрософт предполагалось сортировать такие столбцы?
При добавлении ~600 элементов он (DataGrid) начинает тормозить. Если добавить в него атрибут VirtualizingStackPanel.IsVirtualizing="True" - становится немного лучше. Примерно так же, как на WinForms (даже по-хуже немного). А если запилить ещё и группировку, думаю вообще труба. Так было при использовании ListView. Со включенной группировкой это не юзабельно. С выключенной группировкой - всё норм. А DataGrid тормозит даже без группировки.
Откуда такая фигня с производительностью?