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

93

У меня есть 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>
Килхоффер
источник

Ответы:

172

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

Роб
источник
2
Прекрасно работает. Благодарность!
Килхоффер
6
Одно предупреждение. Это не будет автоматически пересортировано, если вы измените базовые данные.
Келли
1
Еще одно замечание: это может показаться глупым, но если у вашего столбца нет заголовка (заголовка), он также не будет работать - щелчок заголовка запускает сортировку. У меня есть столбец, для которого не нужен заголовок, и я разобрался с этим, установив Header = ""
Bokoskokos
Работает как положено
Харми
34

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

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">
Феррелл
источник
15
 <DataGridTemplateColumn SortMemberPath="DataDiNascita" Header="Data di nascita" IsReadOnly="True">
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <DatePicker SelectedDate="{Binding Path=DataDiNascita}"></DatePicker>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=DataDiNascita,StringFormat=\{0:dd/MM/yyyy\}}"></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
daniele3004
источник