[英]How can I prevent MVVM Light Messenger to Not track Registered Object
我有一個好榜樣:
public class Good
{
public int GoodId { get; set; }
public string Name { get; set; }
}
還有一個GoodListViewModel:
public class GoodListViewModel()
{
// ...
ObservableCollection<Good> goods;
public Good SelectedGood
{
get { return selectedGood; }
set
{
selectedGood = value;
RaisePropertyChanged("SelectedGood");
}
}
// ...
//This will send selected Good to GoodDetailViewModel For Edit
Messenger.Default.Send(SelectedGood, "GoodForEdit");
// ...
}
還有一個GoodDetailViewModel:
public class GoodDetailViewModel
{
public GoodDetailViewModel(IGoodService gs)
{
// ...
Messenger.Default.Register<Good>(this,"GoodForEdit", instance);
}
public void instance(Good good)
{
good.Name = "ChangedName";
}
}
我使用MVVM Light Messenger進行發送和接收以及ViewmodelLocator ..
問題
例如,我打開了一個用於編輯的商品並更改了一些數據,但是不保存並取消了編輯……這里更改的數據又回到了GoodListViewModel!
為什么發生這種情況……是由於ObservableCollection propertyChange或Messenger實現?
請注意,您不會在此處生成您的Good
實例的副本。 您實際上要做的是將原始實例發送到GoodDetailViewModel
。 如果GoodDetailViewModel
對Good
實例進行了任何更改,則GoodListViewModel
也將看到它們。
您必須為Good
類實現ICloneable
以避免這種行為-然后您可以發送副本,對其進行編輯,然后將其發送回(假設您不想放棄所有更改)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.