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)