C# 在datagrid上使用CollectionViewSource进行分组时出现的问题
我尝试在datagrid中分组数据已有一段时间了,但运气不好。在我的ViewModel中,属性:C# 在datagrid上使用CollectionViewSource进行分组时出现的问题,c#,wpf,mvvm,datagrid,grouping,C#,Wpf,Mvvm,Datagrid,Grouping,我尝试在datagrid中分组数据已有一段时间了,但运气不好。在我的ViewModel中,属性: publicobservableCollection竞争对手{get;}= 新的可观察集合(); 公共集合视图源竞争对手集合视图{get;}= 新建CollectionViewSource(); 在我的构造函数中: competitorscolectionview.Source=竞争对手; CompetitorsCollectionView.GroupDescriptions.Add( 新属性组描
publicobservableCollection竞争对手{get;}=
新的可观察集合();
公共集合视图源竞争对手集合视图{get;}=
新建CollectionViewSource();
在我的构造函数中:
competitorscolectionview.Source=竞争对手;
CompetitorsCollectionView.GroupDescriptions.Add(
新属性组描述(名称(CompetitorModel.Qualification));
最后,我的xaml中的datagrid:
我尝试过使用ListCollectionView
s的各种方法,这些方法确实有效,但没有提供排序功能或有用的功能。也就是说,这就是我的工具使用ListCollectionView
而不是CollectionViewSource
时的外观:
如果有人能指出我错在哪里,我将非常感激,因为我无法用我的生命来解决这个问题。目前,我能找到的其他帖子都没有解决我的问题
编辑:我不知道这对解决问题是否重要,但在我的App.xaml
中,我为我的datagrid分组定义了以下样式:
以下是我如何让它工作的,但我想知道是否还有其他方法 我创建了
ICollectionView
的CompetitorCollection
属性,并将其绑定到DataGrid itemsource
private ICollectionView _competitors;
public ICollectionView CompetitorCollection
{
get { return _competitors; }
}
<Window.Resources>
<CollectionViewSource x:Key="DQ" Source="{Binding Path=Competitors}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Qualification"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<DataGrid x:Name="Datagrid_Competition"
ItemsSource="{Binding Source={StaticResource DQ}}"
AutoGenerateColumns="False"
Grid.Column="2"
Grid.Row="3"
HorizontalGridLinesBrush="DarkGray"
VerticalGridLinesBrush="DarkGray"
IsReadOnly="False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserResizeColumns="True"
CanUserDeleteRows="True"
CanUserAddRows="False">
在构造函数中
_competitors = CollectionViewSource.GetDefaultView(Competitors);
_competitors.GroupDescriptions.Add(new PropertyGroupDescription(nameof(CompetitorModel.Qualification)));
将CompetitorCollection
绑定为DataGrid
项目源
<DataGrid x:Name="Datagrid_Competition"
ItemsSource="{Binding CompetitorCollection}"
AutoGenerateColumns="False"
Grid.Column="2"
Grid.Row="3"
HorizontalGridLinesBrush="DarkGray"
VerticalGridLinesBrush="DarkGray"
IsReadOnly="False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserResizeColumns="True"
CanUserDeleteRows="True"
CanUserAddRows="False">
然后在DataGrid
中添加我们刚刚创建为ItemSource
private ICollectionView _competitors;
public ICollectionView CompetitorCollection
{
get { return _competitors; }
}
<Window.Resources>
<CollectionViewSource x:Key="DQ" Source="{Binding Path=Competitors}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Qualification"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<DataGrid x:Name="Datagrid_Competition"
ItemsSource="{Binding Source={StaticResource DQ}}"
AutoGenerateColumns="False"
Grid.Column="2"
Grid.Row="3"
HorizontalGridLinesBrush="DarkGray"
VerticalGridLinesBrush="DarkGray"
IsReadOnly="False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserResizeColumns="True"
CanUserDeleteRows="True"
CanUserAddRows="False">
然后,在视图模型中,只有
竞争对手
(类型为ObservableCollection
)必须存在。参考这里的示例@LastStark,我尝试使用它作为参考,但由于某些原因,我无法使其工作。我想我不明白,所以这只会让问题更难解决。我明白了,你能把Competitor Model类展示给我看吗well@TheLastStark . 但是这里并没有任何东西应该引起这个问题。。奇怪,找不到任何东西,所以当使用ListCollectionView
时,它工作正常?太棒了!这就成功了。我希望它能满足我今后的目标。应该是这样的,所以我将把它标记为解决方案!万分感谢!,您还可以从XAML设置CollectionViewSource
,并将其绑定到源代码,如果您愿意,我稍后会将其添加到解决方案中。任何和所有解决方案都会很好