使用 WPF 和实体框架将查询绑定到数据网格

本文关键字:绑定 数据 数据网 网格 查询 WPF 实体 框架 使用 | 更新日期: 2023-09-27 18:24:56

好的,所以我有一个 wpf 中的数据网格,我想使用实体框架将其绑定到 linq 查询的结果。例如,假设我有一个产品列表,并且只想显示正在销售的产品:

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

但这里有一个问题:我还希望能够直接在 datagridview 中添加/编辑在售产品并将更改保存到数据库中。我将如何做到这一点?

提前谢谢。

使用 WPF 和实体框架将查询绑定到数据网格

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

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

从这个链接:

LoadIQueryable上的一种新的扩展方法,将导致 要迭代的查询的结果,在 EF 中,这相当于 将结果具体化为对象并将它们添加到DbContext 处于Unchanged状态

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

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

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