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;