C# 如何实现实体框架绑定窗口的重置按钮?
在我的窗口中,我创建了一个表单,包含C# 如何实现实体框架绑定窗口的重置按钮?,c#,wpf,entity-framework,binding,dbcontext,C#,Wpf,Entity Framework,Binding,Dbcontext,在我的窗口中,我创建了一个表单,包含Id、code、Name和Values营地,它们绑定在Product.Id、Product.code、Product.Name和Product.Value,我的构造函数中的何处 public partial class ProductEdit : Window, INotifyPropertyChanged { // SystemContext is a DbContext private SystemContext db = App.db;
Id、code、Name和Values营地
,它们绑定在Product.Id
、Product.code
、Product.Name
和Product.Value,
我的构造函数中的何处
public partial class ProductEdit : Window, INotifyPropertyChanged
{
// SystemContext is a DbContext
private SystemContext db = App.db;
private Product _product;
public Product Product
{
get
{
return _product;
}
set
{
_product = value;
OnPropertyChanged("Product");
}
}
public ProductEdit()
{
this.InitializeComponent();
Product = new Product();
this.DataContext = this;
}
private void btSave_Click(object sender, RoutedEventArgs e)
{
db.Products.Add(this.Product);
try
{
db.SaveChanges();
this.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btReset_Click(object sender, RoutedEventArgs e)
{
// What can I do in here for cancel change?
}
}
如何取消更改的值
@har07应答后的解决方案 如果没有将条目状态设置为
未更改
,并尝试获取相同的寄存器,它将获得编辑值如果在未更改的注册表之后没有获得相同的注册表,它将不会更新UI值如果您想取消
产品
中的所有更改,则所有更改都将被取消,就像您刚刚打开一个新的产品编辑
窗口一样,为什么不简单地创建一个新产品:
private void btReset_Click(object sender, RoutedEventArgs e)
{
Product = new Product();
}
就像你在构造器里做的那样。以前创建的产品
对象尚未添加到DataContext,因此用户单击“保存”按钮后将不会保存。这似乎太直截了当了,我怀疑我在你的情况下遗漏了什么东西。(.。)?
这种方法有什么我看不到的问题吗
更新:
假设您从DbContext获取产品,而不是创建新产品,那么您希望取消所有编辑,以使产品属性值保持其最初存储在DbContext中的状态,您可以尝试通过更改产品的状态属性来执行此操作,如下所示:
db.Entry(Product).State = EntityState.Unchanged;
请参阅这篇关于的博文。为我的错误表达感到抱歉,我想谈谈,如果我正在编辑注册表,任何更改都将更新到我的产品对象,我想在单击“重置”按钮编辑产品获取初始值时从数据库刷新我的DbContext值,但我无法实例新建DbContext,因为在我的系统中只使用DbContext,在App.cs中,如果实例为new DbContext,则需要将所有DbContext引用到App.myContextagain@Lai32290检查我的最新答案,这就是你要找的吗?还是我错过了什么?非常感谢!这是工作!
db.Entry(Product).State = EntityState.Unchanged;