使用 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 中添加/编辑在售产品并将更改保存到数据库中。我将如何做到这一点?
提前谢谢。
将
查询绑定到DataGrid
的最佳方法之一是执行以下操作:
var itemsOnSale = from item in context.products
where item.onSale == true
select item;
itemsOnSale.Load();
productViewSource.Source=context.products.Local;
从这个链接:
Load
是IQueryable
上的一种新的扩展方法,将导致 要迭代的查询的结果,在 EF 中,这相当于 将结果具体化为对象并将它们添加到DbContext
处于Unchanged
状态
Local
属性将为您提供ObservableCollection<TEntity>
包含当前的所有Unchanged
、Modified
和Added
对象 由给定DbSet
的DbContext
跟踪。当新对象进入DbSet
(通过查询,DbSet
.Add
/Attach
等(他们将出现在ObservableCollection
.当对象从数据库集中删除时,它 也将从ObservableCollection
中删除。添加或删除 从可观察集合也将执行相应的Add
/Remove
DbSet
.因为 WPF 本身支持绑定到ObservableCollection
不需要额外的代码来拥有两个 方式数据绑定,完全支持 WPF 排序、过滤等。
现在,要将更改保存在DataGrid
上,您唯一需要做的就是创建一个调用上下文方法的方法或命令SaveChanges
:
private void SaveProductChanges()
{
context.SaveChanges();
}