WPF:以子窗体取消编辑后更新父窗体(重置DataContext)

时间:2013-12-27 11:41:53

标签: wpf parent-child editing

我有一个父表单,其中包含WPF数据网格中的客户列表。

以子代码形式编辑表单行:单击行中的按钮,使用datagrid的选定项打开子表单,并将其分配给子表单datacontext。

在子表单中触发PropertyChanged事件时,正在列出更新的父表单中编辑的行。

如果我决定通过单击子窗体中的取消按钮来取消当前的修改,我将恢复已编辑客户的原始值:在编辑之前我已经克隆了要编辑的客户。然后我现在重置子表单DataContext,方法是将其设置为null,然后再设置为克隆客户。这是我在SO上讨论的关于强制DataContext刷新DataHtext本身的更改,而不是其对象的属性。

取消编辑后,子窗体显示我期望的值(克隆客户的属性),而父窗体列表中的关联行未更新:仍显示已编辑的客户值。

我如何要求父表单自行更新?我害怕通过将子表单datacontext重新分配给一个新对象(丢失到父表单datagrid有趣行选择项的链接)丢失了对象之间的引用。

感谢您的指导,

编辑: 当我准备以子格式编辑客户时,我将datagrid选定项目分配给我的应用程序的静态变量,因为它是单用户,因此更容易处理“当前客户”。当我取消版本时,这个静态变量值已经改变了,但也许我必须将它分配给父表格datagrid选择项目呢?

1 个答案:

答案 0 :(得分:0)

我是对的:在子窗体关闭后,我必须使用更新的对象更新右侧索引的父窗体datagrid集合。

// update static variable
SocodifApp.Client = ((Client) Listing.SelectedItem);            
ClientForm editClientForm = new ClientForm();
editClientForm.ShowDialog();
// Get modified static variable after child form closes and update datagrid collection    
// relevant item
_dataContainer.Clients[Listing.SelectedIndex] = SocodifApp.Client;