Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF Toolkit DataGrid上对DataGridTemplateColumn排序?_Wpf_Sorting_Wpftoolkit_Datagridtemplatecolumn - Fatal编程技术网

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

如何在WPF Toolkit DataGrid上对DataGridTemplateColumn排序?,wpf,sorting,wpftoolkit,datagridtemplatecolumn,Wpf,Sorting,Wpftoolkit,Datagridtemplatecolumn,我有一个WPF工具包DataGrid和一个DataGridTemplateColumn。我在网格属性中指定希望所有列都可以排序,但DataGridTemplateColumn不允许这样做。所有其他列都允许排序。我甚至尝试为该列显式地将CanUserSort设置为true,但没有成功。甚至可以对模板列进行排序吗?我提供了一个适用于所有列的自定义排序器,但标题不允许单击排序 <Controls:DataGrid ItemsSource="{Binding Events}" AutoGenera

我有一个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>


您需要将
控件:DataGridTemplateColumn
上的
SortMemberPath
属性设置为要排序的CLR属性的名称。

SortMemberPath=“name”
添加到DataGridTemplateColumn。它开始排序

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



一句警告。如果您更改基础数据,这不会自动重新排序。另一个注意事项:这听起来可能很愚蠢,但如果您的列没有标题(标题),它也将不起作用-单击标题将触发排序。我有一个不需要标题的列,我通过设置header=“”按预期工作来解决这个问题
 <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>