使用WPF和Entity Framework将查询绑定到datagrid

时间:2015-11-30 01:16:20

标签: c# wpf entity-framework linq datagrid

好的,我所拥有的是wpf中的数据网格,我希望使用实体框架绑定到linq查询的结果。例如,假设我有一个产品列表,我想只显示待售产品:

var itemsOnSale = from item in context.products 
       where item.onSale == true 
       select item;
context.products.Load();
productViewSource.Source = itemsOnSale.ToList();

但是这里有一个问题:我还希望能够直接在datagridview中添加/编辑销售的产品,并将更改保存到数据库中。我该怎么做呢?

提前致谢。

1 个答案:

答案 0 :(得分:3)

将查询绑定到DataGrid的最佳方法之一是执行以下操作:

var itemsOnSale = from item in context.products 
       where item.onSale == true 
       select item;

itemsOnSale.Load();
productViewSource.Source=context.products.Local;

从此link

  

LoadIQueryable上的新扩展方法,会导致该问题   要重复的查询结果,在EF中等于   将结果具体化为对象并将其添加到DbContext   在Unchanged

     

Local属性会为您提供ObservableCollection<TEntity>   包含当前的所有UnchangedModifiedAdded个对象   由DbContext跟踪给定的DbSet。当新对象进入   DbSet(通过查询,DbSetAdd / Attach等),它们会出现在   ObservableCollection。当一个对象从DbSet中删除时   也将从ObservableCollection中删除。添加或删除   从ObservableCollection也将执行相应的   Add上的Remove / DbSet。因为WPF本身支持绑定到   ObservableCollection没有额外的代码需要两个   方式数据绑定完全支持WPF排序,过滤等。

现在要在DataGrid上保存这些更改,您唯一需要做的就是创建一个方法或command调用您的上下文的SaveChanges方法:

private void SaveProductChanges()
{
   context.SaveChanges(); 
}