确保退出时保存所有更改

时间:2015-08-11 11:50:51

标签: wpf entity-framework

我有一个WindowDatagrid连接到EF对象。

到目前为止,我已经完成了以下操作,以便在修改后保存行:

   private void lookupTableDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       ctx.SaveChanges();
    }

但是,如果用户关闭窗口而不移动到另一行,则无法保存更改。我尝试使用Window_UnloadedWindow_Closing,但似乎那时Context不再存在。

编辑1:

已达到以下代码,但未在上下文中保存更改:

   private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        ctx.SaveChanges();
    }

编辑2:

    private CollectionViewSource viewSource;
    private OrderProcessingEntities ctx;
    private DbSet dbSet;

    public EditLookupTable(OrderProcessingEntities ctx, DbSet dbSet)
    {
        InitializeComponent();
        Title = dbSet.ElementType.Name.ToString();
        this.ctx = ctx;
        this.dbSet = dbSet;
        lookupTableDataGrid.DataContext = dbSet.Local;

        viewSource = ((CollectionViewSource)(this.FindResource("viewSource")));
        dbSet.Load();
        viewSource.Source = dbSet.Local;


    }

1 个答案:

答案 0 :(得分:2)

自WPF 4以来,datagrid的属性更新仅在行选择更改时发生,因此为了支持关闭方案而不选择其他行,您必须为可编辑列显式设置UpdateSourceTrigger:

<DataGridTextColumn Binding="{Binding Name, 
UpdateSourceTrigger=PropertyChanged}" Header="Name"></DataGridTextColumn>

注意:
我认为设置 UpdateSourceTrigger = LostFocus 也适用于这种情况。与PropertyChanged的不同之处在于,这将以单元格为基础更新对象,有时这是不可取的。