WPF数据网格按日期和时间分组和排序

本文关键字:时间 排序 日期 数据 数据网 网格 WPF | 更新日期: 2023-09-27 18:13:13

我有一个WPF DataGrid绑定到约会对象的ICollectionView上,以显示在DataGrid上。我的每个约会都有一个DateTime字段,我正尝试按日期分组并按时间排序。我尝试了各种配置和日期时间格式,虽然分组是正确的,但组本身没有排序。

添加一个新的约会默认约会日期时间为现在。当我更改日期时,如果该日期不存在,则会添加该日期的新组,但这些组没有排序。

我使用了一个GroupStyle: http://www.wpftutorial.net/DataGrid.html#grouping

我还使用扩展WPF工具包(通过nuget下载)DateTimePicker为DataGrid列:

<DataGridTemplateColumn
                    x:Name="AppointmentDateTimeColumn"
                    Header="Time"
                    Width="Auto">
                    <DataGridTemplateColumn.CellStyle>
                        <Style
                            TargetType="{x:Type DataGridCell}">
                            <Setter
                                Property="Template">
                                <Setter.Value>
                                    <ControlTemplate
                                        TargetType="{x:Type DataGridCell}">
                                        <Grid
                                            Background="{TemplateBinding Background}">
                                            <ContentPresenter
                                                VerticalAlignment="Stretch" />
                                        </Grid>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTemplateColumn.CellStyle>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <xctk:DateTimePicker
                                Value="{Binding Path=Appointment.AppointmentDateTime, Mode=TwoWay}"
                                Format="ShortTime" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <xctk:DateTimePicker
                                Value="{Binding Path=Appointment.AppointmentDateTime, Mode=TwoWay}"
                                Format="ShortTime" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>

我的ICollectionView初始化代码是这样的:

AppointmentList = CollectionViewSource.GetDefaultView(GetAppointments());
AppointmentList.GroupDescriptions.Add(new PropertyGroupDescription("Appointment.AppointmentDateTime.Date"));
AppointmentList.SortDescriptions.Add(new SortDescription("Appointment.AppointmentDateTime", ListSortDirection.Ascending));

任何帮助和建议都将非常感激。由于

WPF数据网格按日期和时间分组和排序

我最终将数据网格的所有列设置为只读,并添加了几个文本框,我可以使用这些文本框编辑数据网格的选定项。在我更新后,我的网格现在正确排序。