突然搞不懂貌似应该很简单的CollectionViewSource的Grouping问题了
目的:Northwind数据库的Product表按CategoryName(或CategoryId)分组显示。
数据库就这么简单了:

//NorthwindDomainService.metadata
internal sealed class ProductMetadata
{
...
[Include]
public Category Category { get; set; }
...
//NorthwindDomainService.cs
public IQueryable<Product> GetProducts()
{
return this.ObjectContext.Products.Include("Category") ;
}
这些都做了。
Home.xaml
xmlns:vm="clr-namespace:GroupingTest002.ViewModels"
...
<navigation:Page.Resources>
<CollectionViewSource x:Key="ProductsCV" Source="{Binding Products}">
</CollectionViewSource>
</navigation:Page.Resources>
<navigation:Page.Style>
<StaticResource ResourceKey="PageStyle"/>
</navigation:Page.Style>
<navigation:Page.DataContext>
<vm:HomeViewModel />
</navigation:Page.DataContext>
...
<sdk:DataGrid Height="300" ItemsSource="{Binding Source={StaticResource ProductsCV}}" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Product Id" SortMemberPath="ProductID" Binding="{Binding ProductID}" />
<sdk:DataGridTextColumn Header="Product Name" SortMemberPath="ProductName" Binding="{Binding ProductName}" />
<sdk:DataGridTextColumn Header="Cateogry" SortMemberPath="CategoryId" Binding="{Binding Category.CategoryName}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
目前为止显示没问题。
但是,想用CategoryId分组没效果, PropertyName设成Category, Category.CategoryName等等都不行。但用Product表的ReorderLevel, Discontinued等是可以分组的。
<CollectionViewSource x:Key="ProductsCV" Source="{Binding Products}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="CategoryId" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
难道不能用外键字段进行分组吗?
数据库就这么简单了:

//NorthwindDomainService.metadata
internal sealed class ProductMetadata
{
...
[Include]
public Category Category { get; set; }
...
//NorthwindDomainService.cs
public IQueryable<Product> GetProducts()
{
return this.ObjectContext.Products.Include("Category") ;
}
这些都做了。
//HomeViewModel.cs
public class HomeViewModel
{
public IEnumerable<Product> Products { get; set; }
public HomeViewModel()
{
var context = new NorthwindDomainContext();
Products = context.Products;
if (!DesignerProperties.IsInDesignTool)
context.Load(context.GetProductsQuery());
}
}Home.xaml
xmlns:vm="clr-namespace:GroupingTest002.ViewModels"
...
<navigation:Page.Resources>
<CollectionViewSource x:Key="ProductsCV" Source="{Binding Products}">
</CollectionViewSource>
</navigation:Page.Resources>
<navigation:Page.Style>
<StaticResource ResourceKey="PageStyle"/>
</navigation:Page.Style>
<navigation:Page.DataContext>
<vm:HomeViewModel />
</navigation:Page.DataContext>
...
<sdk:DataGrid Height="300" ItemsSource="{Binding Source={StaticResource ProductsCV}}" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Product Id" SortMemberPath="ProductID" Binding="{Binding ProductID}" />
<sdk:DataGridTextColumn Header="Product Name" SortMemberPath="ProductName" Binding="{Binding ProductName}" />
<sdk:DataGridTextColumn Header="Cateogry" SortMemberPath="CategoryId" Binding="{Binding Category.CategoryName}" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
目前为止显示没问题。
但是,想用CategoryId分组没效果, PropertyName设成Category, Category.CategoryName等等都不行。但用Product表的ReorderLevel, Discontinued等是可以分组的。
<CollectionViewSource x:Key="ProductsCV" Source="{Binding Products}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="CategoryId" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
难道不能用外键字段进行分组吗?
...全文
相关推荐
WPF GROUPING
grouping 实例Grouping and Virtualization
WPF listView Style Group
WPF listView Style Group listview分组列表显示
wpf Listbox用collectionview分组展示效果
接到一个工程要做前台页面,对于我这个刚毕业的小菜鸟来说 画页面或许是个不错的选择 那样可以了解一些机制 不至于那么痴,之前是写后台的 主要是报表方面 所以当我通过自学了WPF前台后 满以为就这样结束了,结果一个老油条竟然把ViewModel也交给我写了,天啦! 我才转行 算了没办法硬着头皮上了,但是 可恶的是 那家伙把我当全能工程师去培养了 连功能和动画都要我写(是不是就我一个人觉得wpf动画操蛋的额) 不说了步入正题 直接发工程吧!
wpf listView分组排序
wpf listView分组排序 鉴于之前上传的代码不可运行,特地改了下,直接可运行。
WPF DataGrid 分组演示程序
微软官网 WPF DataGrid 分组演示程序 内容包括 DataGrid,ObservableCollection<T>,ICollectionView,CollectionViewSource等模块的应用


