如何在WPF Toolkit DataGrid上对DataGridTemplateColumn进行排序?

106
我有一个带有一个DataGridTemplateColumn的WPF Toolkit DataGrid。我在网格属性中指定希望所有列都可排序,但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>
3个回答

189

您需要在Controls:DataGridTemplateColumn上设置SortMemberPath属性,以CLR属性名称作为排序依据。


6
警告:如果您更改底层数据,它将不会自动重新排序。 - Kelly
1
另外一点需要注意的是:如果您的列没有标题,它也将无法正常工作 - 单击标题会触发排序。我有一列不需要标题,通过设置Header=" "解决了这个问题。 - Bokoskokos
正常工作 - Harmi

41

在DataGridTemplateColumn中添加了SortMemberPath="Name",它开始进行排序。

<data:DataGridTemplateColumn Header="Name" SortMemberPath="Name" CanUserSort="True">

16
 <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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接