我有一个Window
,Datagrid
连接到EF对象。
到目前为止,我已经完成了以下操作,以便在修改后保存行:
private void lookupTableDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ctx.SaveChanges();
}
但是,如果用户关闭窗口而不移动到另一行,则无法保存更改。我尝试使用Window_Unloaded
或Window_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;
}
答案 0 :(得分:2)
自WPF 4以来,datagrid的属性更新仅在行选择更改时发生,因此为了支持关闭方案而不选择其他行,您必须为可编辑列显式设置UpdateSourceTrigger:
<DataGridTextColumn Binding="{Binding Name,
UpdateSourceTrigger=PropertyChanged}" Header="Name"></DataGridTextColumn>
注意:
我认为设置 UpdateSourceTrigger = LostFocus 也适用于这种情况。与PropertyChanged的不同之处在于,这将以单元格为基础更新对象,有时这是不可取的。