你不想序列化你的视图模型,你想序列化它们的当前状态,以便在应用程序重新启动时它们可以重建自己。
所以,像这样:
public class ViewModelFoo
{
public ViewModelFoo(ISerializationService serializationService)
{
_serializationService=serializationService;
LoadDefaultData();
}
private void LoadDefaultData()
{
//Do all your loading of static data here
FooItems=GetFooItems();
if(_serializationService.ContainsSerializedState)
{
LoadSerializedState();
}
}
public Observable<Foo> FooItems{get;set;}
public Foo SelectedFooItem
{
get{return _fooItem;}
set{_fooItem=value;
RaisePropertyChanged("SelectedFooItem");
_serializationService.SelecetedFooItem=value;
}
}
private void LoadSerializedData()
{
SelectedFooItem=_serializationService.SelectedFooItem;
ReloadData();
}
private void ReloadData()
{
//load whatever data you need. You've now got your app back into the state it was when it was serialized;
}
}
基本上,每次我们更改屏幕上的内容时,我们都会更新状态对象。当我们挂起应用程序(App 类中的事件)时,我们将保存状态对象。
通过这样做,我们能够存储视图模型的状态,而不是视图模型本身。因为我们控制了序列化服务,所以我们可以使用我们想要使用的任何序列化方法来保存我们的数据。