C# Silverlight DataContext:克隆对象中也正在进行更改
考虑以下复制/克隆对象的方法(将所有字段复制到新对象中) 我有一个表单,它打开了一个子表单,其中传递了两个对象(两倍于上述类型的相同对象)。我像这样打开表格:C# Silverlight DataContext:克隆对象中也正在进行更改,c#,asp.net,.net,silverlight,C#,Asp.net,.net,Silverlight,考虑以下复制/克隆对象的方法(将所有字段复制到新对象中) 我有一个表单,它打开了一个子表单,其中传递了两个对象(两倍于上述类型的相同对象)。我像这样打开表格: //my selected Record Record rec = DateGridAdjustedWorks.ActiveRecord; AangepastWerk AWorkObject = (AangepastWerk)((DataRe
//my selected Record
Record rec = DateGridAdjustedWorks.ActiveRecord;
AangepastWerk AWorkObject = (AangepastWerk)((DataRecord)rec).DataItem;
AangepastWerk AWorkObjectBackup = _Vm.CloneAdjustedWork(AWorkObject);
WindowModifyAdjustedWork windowForModify = new WindowModifyAdjustedWork(AWorkObject,AWorkObjectBackup, true);
windowForModify.Closing += new CancelEventHandler(OnModifyAWClosing);
windowForModify.ShowDialog();
在该子表单中,我将第一个对象设置为DataContext_adjustedWork和_adjustedWorkCopy是表单的属性
_adjustedWork = pAdjustedWork;
GridAdjustedWork.DataContext = AdjustedWork;
_adjustedWorkCopy = pAdjustedWorkCopy;
问题:
在形式上,我有能力改变对象,同时保留原始对象。用户可以看到原始对象,因此他可以跟踪更改(用户请求),但是如果我更改了我的_adjustedWork(即我的datacontext对象)中的某些内容,那么我的_adjustedWorkCopy(在我的代码隐藏中没有对其执行任何操作)也会更改。我的问题是:为什么会发生这种情况,我该如何应对?我在这里遗漏了什么(可能是一些非常基本的东西)?我总是通过序列化到json来进行深度克隆 在使用Servicestack的示例中,您可以:
var json = myObject.ToJson();
var clonedObject = json.FromJson<MyObject>();
return clonedObject;
var json=myObject.ToJson();
var clonedObject=json.FromJson();
返回克隆对象;
也许这会有所帮助。找到了克隆对象也收到更改的原因
public AangepastWerk CloneAdjustedWork(AangepastWerk pAdjustedWork)
{
return new AangepastWerk()
{
AangepastWerkID = pAdjustedWork.AangepastWerkID,
ArbeidsOngeval = pAdjustedWork.ArbeidsOngeval,
DatumCreatie = pAdjustedWork.DatumCreatie,
DatumLaatsteWijziging = pAdjustedWork.DatumLaatsteWijziging,
DatumOngeval = pAdjustedWork.DatumOngeval,
GewijzigdDoor = pAdjustedWork.GewijzigdDoor,
NietErkend = pAdjustedWork.NietErkend,
Stamnummer = pAdjustedWork.Stamnummer,
Verzorging = pAdjustedWork.Verzorging, <------------ Issue lies here
VerzorgingId = pAdjustedWork.VerzorgingId
};
}
克隆:
Verzorging = mcare_VM.CloneMedicalCare(pAdjustedWork.Verzorging)
使用与前面提到的相同的逻辑(复制每个字段)。ServiceStack(w JSON)可以为我提供一个潜在的工作解决方案。但我希望避免使用第三方DLL
MedicalCare_VM mcare_VM = new MedicalCare_VM();
return new AangepastWerk()
{
AangepastWerkID = pAdjustedWork.AangepastWerkID,
ArbeidsOngeval = pAdjustedWork.ArbeidsOngeval,
DatumCreatie = pAdjustedWork.DatumCreatie,
DatumLaatsteWijziging = pAdjustedWork.DatumLaatsteWijziging,
DatumOngeval = pAdjustedWork.DatumOngeval,
GewijzigdDoor = pAdjustedWork.GewijzigdDoor,
NietErkend = pAdjustedWork.NietErkend,
Stamnummer = pAdjustedWork.Stamnummer,
Verzorging = mcare_VM.CloneMedicalCare(pAdjustedWork.Verzorging),
VerzorgingId = pAdjustedWork.VerzorgingId
};
Verzorging = mcare_VM.CloneMedicalCare(pAdjustedWork.Verzorging)