C# Wpf ListView是否可以对组项目进行不同于组标题的排序?
我有一个带有分组和排序的列表视图控件 组标题是按降序排列的日期 我试图找出如何按升序排列每个组标题下的分组项目,但不知道如何完成,或者是否可以使用ListView 这是我到目前为止的XAML 注意:ScheduledItemSearchResults是ScheduleItems的可观察集合。每个项都有一个标题和一个ScheduleDate属性C# Wpf ListView是否可以对组项目进行不同于组标题的排序?,c#,wpf,listview,C#,Wpf,Listview,我有一个带有分组和排序的列表视图控件 组标题是按降序排列的日期 我试图找出如何按升序排列每个组标题下的分组项目,但不知道如何完成,或者是否可以使用ListView 这是我到目前为止的XAML 注意:ScheduledItemSearchResults是ScheduleItems的可观察集合。每个项都有一个标题和一个ScheduleDate属性 <Grid x:Name="TxScheduleItemResults" Grid.Column="1">
<Grid x:Name="TxScheduleItemResults"
Grid.Column="1">
<Grid.Resources>
<CollectionViewSource Source="{Binding ScheduledItemSearchResults}" x:Key="scheduledItems">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Value.ScheduleDateTime" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="Value.ScheduleDateTime.Date" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Grid.Resources>
<ListView x:Name="ScheduledItemResultsList"
Style="{StaticResource TransparentListViewStyle}"
ItemContainerStyle="{StaticResource alternatingListViewItemStyle}"
AlternationCount="2"
ItemsSource="{Binding Source={StaticResource scheduledItems}}"
>
<ListView.View>
<GridView>
<GridViewColumn Header="Scheduled Items"
Width="{Binding ElementName=ScheduledItemResultsList, Path=ActualWidth}"
>
<GridViewColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource ModuleGroupHeader}"
Text="{Binding}"
/>
</DataTemplate>
</GridViewColumn.HeaderTemplate>
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Value.Title}" Width="200"/>
<TextBox Text="{Binding Value.ScheduleDateTime, StringFormat={}{0:HH:mm:ss}}" Width="120"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Items[0].Value.ScheduleDateTime.Date, StringFormat={}{0:dd/MM/yyyy}}" FontWeight="Bold" Foreground="Gray" FontSize="22" VerticalAlignment="Bottom" />
<TextBlock Text="{Binding ItemCount}" FontSize="22" Foreground="Green" FontWeight="Bold" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
<TextBlock Text=" item(s)" FontSize="22" Foreground="Silver" FontStyle="Italic" VerticalAlignment="Bottom" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
</Grid>
您可以在一个CollectionViewSource
中包含多个SortDescription
元素:
<CollectionViewSource Source="{Binding ScheduledItemSearchResults}" x:Key="scheduledItems">
<CollectionViewSource.SortDescriptions>
<!--This will sort groups-->
<scm:SortDescription PropertyName="Value.ScheduleDateTime.Date" />
<!--This will items-->
<scm:SortDescription PropertyName="Value.ScheduleDateTime" Direction="Descending"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="Value.ScheduleDateTime.Date" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
顺便说一句,我不太明白你到底想对它进行什么样的排序,但是如果你先对组进行排序,然后对项目进行排序,它应该会起作用。
SortDescriptions
应该可以对组和组中的项目进行排序。有什么问题吗?排序描述按日期降序对集合中的所有项目进行排序,这会使组标题正确排序。但我想按日期升序对每个组下的项目进行排序。所以我想要一个不同的分类描述!?对于每组中的项目。谢谢,这与我所追求的排序相反,但这是正确的答案。