Сортировка при нажатии на столбец ListView

Microsoft предлагает вот такой код для сортировки:

Тут сразу несколько проблем.
Первая:

var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;

Тут columnBinding всегда равно null. По-этому, для сортировки берётся не имя привязки, а имя столбца. Если эти значения не совпадают - куча ошибок в консоли (потому что в модели нет свойства с таким именем). Хотя в XAML атрибут DisplayMemberBinding прописан. Что ещё нужно? :thinking:
Другие проблемы пока не скажу. Возможно, они сами решатся, когда решится эта.
Сейчас подумал. Может это потому что ItemsSource присваивается в коде, а не в XAML :thinking: Но как по-другому - я не знаю :man_shrugging:

Вижу, ответов нет :thinking: Тогда вот остальные проблемы:
2) Если сортировка всё-таки произошла, то новые элементы будут добавляться несортированно. Либо в начало, либо в конец списка (зависит от порядка сортировки). Получается, что при добавлении нового элемента надо снова вызывать метод Sort().
3) Данный способ сортировки использует метод dataView.Refresh(). А это значит, что при добавлении новых элементов (если их каждый раз сортировать) перемещаться по списку клавиатурой будет невозможно (как я описывал в одной из предыдущих тем).

:man_facepalming:
Всё правильно. Я не на все столбцы тыкал. У меня же некоторые столбцы кастомные:

                                <GridViewColumn Header="Name" Width="120">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <Border BorderBrush="Gray" BorderThickness="1" Visibility="{Binding AvatarVisibility}">
                                                    <Image Width="90" Height="90" Source="{Binding AvatarImageUrl, TargetNullValue={x:Null}}" />
                                                </Border>
                                                <TextBlock HorizontalAlignment="Center" Text="{Binding Name}" />
                                            </StackPanel>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
 
                               <GridViewColumn Header="Age" Width="50">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBlock HorizontalAlignment="Center" Text="{Binding AgeFormatted}" />
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>

                                <GridViewColumn Header="ID" Width="100" DisplayMemberBinding="{Binding UserId}" />

То есть, свойство DisplayMemberBinding прописано не у всех. Сортировка нормально работает только для тех столбцов, где оно прописано. Остальные глючат.
Как тогда быть? :thinking: Нельзя же сделать привязку в GridViewColumn, если она нужна в его дочернем компоненте :man_shrugging:

Если взять DataGrid, то там вроде встроена сортировка.

Мне потом ещё группировка понадобится. Типа как здесь:
fancy-screenshot2
Я думал, WPF всё это умеет искаропки.
А оказалось, они даже встроенный NumericUpDown до сих пор не написали, Карл! :man_facepalming: На каждый чих нужна какая-нибудь библиотека от энтузиазных энтузиастов.

Всю жизнь так было. Telerik, на этом компанию сделали

Заменил ListView на DataGrid. Сортировка работает только для столбцов с атрибутом Binding. У DataGridTemplateColumn этого атрибута нет. Он даже на мышку не реагирует. Как в майкрософт предполагалось сортировать такие столбцы? :thinking:
При добавлении ~600 элементов он (DataGrid) начинает тормозить. Если добавить в него атрибут VirtualizingStackPanel.IsVirtualizing="True" - становится немного лучше. Примерно так же, как на WinForms (даже по-хуже немного). А если запилить ещё и группировку, думаю вообще труба. Так было при использовании ListView. Со включенной группировкой это не юзабельно. С выключенной группировкой - всё норм. А DataGrid тормозит даже без группировки.
Откуда такая фигня с производительностью? :thinking: