我试图找到一种在CollectionViewSource中对组进行排序的方法,并将它们与XAML DataGrid中的未分组项一起显示。我当前正在从ObservableCollection创建CVS并分配分组描述,这是集合中对象的属性。
我知道我可以将它们分类为升序/降序,但我感兴趣的是能够重新排列DataGrid,因为它是具有分组功能的媒体播放列表。
关于这应该如何运作的任何想法都将非常感激。
更新:ListCollectionView.CustomSort公开了一个IComparer接口来对项目进行排序,但是如何将它连接到它的位置呢?
当前代码:
视图模型
ObservableCollection<PlaylistItem> Playlist { get; set; }
CollectionViewSource CVS { get; set; }
//
Playlist = new ObservableCollection<PlaylistItem>();
CVS = new CollectionViewSource{ Source = Playlist };
CVS.GroupDescriptions.Add(new PropertyGroupDescription("Group"));
CVS.IsLiveGroupingRequested = true;
查看
<DataGrid ItemsSource="{Binding CVS.View}">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Style.Resources>
<ControlTemplate x:Key="MultiItemGroupTemplate" TargetType="{x:Type GroupItem}">
<Expander IsExpanded="False" BorderThickness="0" BorderBrush="White" Background="White">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=ItemCount}" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
<ControlTemplate x:Key="SingleItemGroupTemplate" TargetType="{x:Type GroupItem}">
<ItemsPresenter />
</ControlTemplate>
</Style.Resources>
<Style.Triggers>
<DataTrigger Binding="{Binding Name}" Value="">
<Setter Property="Template" Value="{StaticResource SingleItemGroupTemplate}" />
</DataTrigger>
</Style.Triggers>
<Setter Property="Template" Value="{StaticResource MultiItemGroupTemplate}"/>
</Style>
</GroupStyle.ContainerStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>