ビューモデルをシリアル化するのではなく、アプリの再起動時にビューモデルが再構築できるように、現在の状態をシリアル化する必要があります。
だから、このようなもの:
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クラスのイベント)を一時停止したときに状態オブジェクトを保存します。
これを行うことで、ビューモデル自体ではなく、ビューモデルの状態を保存できます。シリアル化サービスを制御するため、使用するシリアル化方法を使用してデータを保存できます。