[英]How to retrieve the data out of a Silverlight DataContext Object
[英]Silverlight DataContext: Changes also being made in Cloned Object
考慮以下復制/克隆對象的方法(將所有字段都復制到新對象中)
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,
VerzorgingId = pAdjustedWork.VerzorgingId
};
}
我有一個打開子窗體的窗體,其中傳遞了兩個對象(是上述類型的同一對象的2倍)。 我打開這樣的表格:
//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(該對象是我的數據上下文)中更改了某項,然后在_adjustedWorkCopy中進行了更改(沒有對其執行任何操作),則他可以跟蹤更改(用戶的請求)在我后面的代碼中)也進行了更改。 我向您開放的想法是:為什么會發生這種情況,我該如何解決? 我在這里缺少什么(可能是非常基本的東西)?
我總是將序列化為json進行深度克隆。
以Servicestack為例,您可以:
var json = myObject.ToJson();
var clonedObject = json.FromJson<MyObject>();
return clonedObject;
也許可以幫上忙。
找到克隆對象也收到更改的原因
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
};
}
在這種情況下,pAdjustedWork.Verzorging是一個對象。 我還需要克隆這個對象。我假設(錯誤地)如上所述克隆將創建一個新的單獨的'VerzorgingsObject'。
我的問題的解決方案是:
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)
使用與前面提到的相同的邏輯(復制每個字段)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.