Как я могу отсортировать DataGridTemplateColumn в DataGrid WPF Toolkit?

У меня есть DataGrid WPF Toolkit с одним DataGridTemplateColumn. Я указал в атрибуте сетки, что я хочу, чтобы все столбцы можно было сортировать, но DataGridTemplateColumn не позволяет этого. Все остальные столбцы разрешают сортировку. Я даже пробовал явно установить для CanUserSort значение true для этого столбца, но безуспешно. Можно ли вообще отсортировать столбец шаблона? Я предоставил настраиваемый сортировщик, который работает для всех столбцов, но заголовок не позволяет выполнить сортировку.

<Controls:DataGrid ItemsSource="{Binding Events}" AutoGenerateColumns="False" 
                               CanUserSortColumns="True" 
                               CanUserReorderColumns="False" 
                               Sorting="DataGrid_Sorting" 
                               x:Name="EventsGrid">
                <Controls:DataGrid.Columns>
                    <Controls:DataGridTemplateColumn Header="Type" Width="42" CanUserResize="False">
                        <Controls:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Image Source="{Binding EventTypeImage, Mode=OneWay}" HorizontalAlignment="Center" Width="16"/>
                            </DataTemplate>
                        </Controls:DataGridTemplateColumn.CellTemplate>
                    </Controls:DataGridTemplateColumn>
                    <Controls:DataGridTextColumn Header="Source" 
                                           Binding="{Binding Source, Mode=OneWay}" />
                    <Controls:DataGridTextColumn Header="Details" MinWidth="175" 
                                           Binding="{Binding Details, Mode=OneWay}" />
                    <Controls:DataGridTextColumn Header="Timestamp" MinWidth="175"  
                                           Binding="{Binding Timestamp, Mode=OneWay}" 
                                           IsReadOnly="True"/>
                </Controls:DataGrid.Columns>
            </Controls:DataGrid>

person Kilhoffer    schedule 29.04.2010    source источник


Ответы (2)


Вам необходимо установить свойство SortMemberPath в Controls:DataGridTemplateColumn на имя свойства CLR, по которому вы хотите выполнить сортировку.

person Rob    schedule 29.04.2010
comment
Одно предупреждение. Это не приведет к автоматической повторной сортировке, если вы измените базовые данные. - person Kelly; 27.06.2011
comment
Еще одно замечание: это может показаться глупым, но если в вашем столбце нет заголовка (заголовка), он также не будет работать - щелчок по заголовку запускает сортировку. У меня есть столбец, для которого не нужен заголовок, и я разобрал его, установив Header = - person Bokoskokos; 28.08.2014
comment
Работает как положено - person Harmi; 16.03.2020

Добавлен SortMemberPath="Name" в DataGridTemplateColumn. Началась сортировка.

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">
person ferrell    schedule 30.04.2010