如何在 WPF 工具包 DataGrid 上对 DataGridTemplateColumn 进行排序?

我有一个 WPF 工具包 DataGrid 和一个 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>
38093 次浏览

You need to set the SortMemberPath property on Controls:DataGridTemplateColumn to the name of the CLR property you want to sort on.

Added SortMemberPath="Name" to DataGridTemplateColumn. It started sorting.

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">
 <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>