我ViewModel
:如何正常反序列化View模型的一部分,而不會丟失以前的數據綁定?
public class MyViewModelType {
public PlayerElements Player { get; set; }
.
.
.
}
PlayerElements
包含了許多綁定屬性:
public class PlayerElements : INotifyPropertyChanged {
ObservableCollection<IEntity> Angles { get; set; }
.
.
.
ObservableCollection<IBuilding> Castles { get; set; }
public string PlayerName { get; set; }
}
當我反序列化保存的模型,我做這樣的事情:
public MyViewModelType ViewModel { get; set; }
public LoadPlayerFromDisk(SomeDataModel dm){
ViewModel.Player = new PlayerElements(vm.PlayerData);
}
的問題是清楚的:當我創建新的PlayerElements
時,我失去了所有綁定。我目前的解決方案是清除所有列表和手動添加:
ViewModel.Player.Angles.Clear();
foreach (var angel in vm.PlayerData.Angles)
ViewModel.Player.Angles.Add(angel);
不用說 - 可怕的解決方案......
我想到了另一種選擇,將處理程序複製所有事件的新對象使用大劑量的反射。它是同類型不好解決的:我需要走整個樹(的ObservableCollection<T>
財產,每個項目實現INotifyPropertyChanged
,並且可以有更多的ObservableCollection<T>
類型的孩子,等...)
所以,我怎麼能優雅地反序列化視圖模型,而不會丟失所有綁定?
奇怪,你知道INotifyPropertyChanged是什麼,你爲什麼不在虛擬機中實現它? – Will 2014-10-29 15:56:55
@我會實現它,爲了便於閱讀,我刪除了大量代碼。 – Tar 2014-10-29 16:34:26