我有一个PhoneRecord
传递给一个EditWindow
,以便用户能够编辑记录。每个PhoneRecord
都有一个类型CostCode
。在EditWindow
我克隆一条记录以打破对 的引用,SelectedRecord
以便在用户单击取消时,我可以传回PhoneRecord
. 这是我克隆的方法:
public ModifyPhoneRecordViewModel(PhoneRecord passedRecord)
{
SelectedRecord = passedRecord;
_tempRecord = passedRecord.Clone() as PhoneRecord;
}
这PhoneRecord
是EF生成的部分类,所以这是我实现的方式ICloneable
partial class PhoneRecord : ICloneable
{
public object Clone()
{
return (PhoneRecord)MemberwiseClone();
}
}
当用户单击取消时,我将返回_tempRecord
并对其进行一些处理以恢复到DataGrid
/中的原始状态TextBoxes
:
private void ProcessCancelCommand(PhoneRecord passedRecord)
{
DataGridRecords[DataGridRecords.IndexOf(DataGridRecords.FirstOrDefault(c => c.Id == passedRecord.Id))] = passedRecord;
SelectedRecord = passedRecord;
Application.Current.MainWindow.Activate();
}
但是,这会引发错误,并且CostCode
会从TextBox
:
“存储在代理中的实体包装器没有引用同一个代理”
有没有一种方法可以防止这种情况发生,以便我可以通过PhoneRecord
有效的方式传回 a CostCode
?