目的: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") ;
}
这些都做了。
//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>
难道不能用外键字段进行分组吗?