1

Windows 8 Store アプリ用の MVVMLight を使い始めています。いくつかのビデオを見た後、基本的な作業ができました。しかし、私は問題に遭遇しました。基本モデルの各クラスは、MVVMLight の ObservableObject から継承しています。

これは正常に機能していましたが、データを XML にロードして保存したいと考えています。そのため、MVVM 以外の実装で以前に使用した DataContract 属性でそれらをマークしました。ただし、継承したクラスもこの属性でマークする必要があるため、シリアライズ時にエラーが発生します。

ObservableCollection は dll でコンパイルされるため、これをどのように管理すればよいですか? 「ViewModel」スタイルのクラスと一致する一連の基本的な (POCO スタイル) クラスを作成し、これらの間のマッピングを処理する必要がありますか。それとももっと良い方法がありますか?

4

2 に答える 2

2

ビューモデルをシリアル化するのではなく、アプリの再起動時にビューモデルが再構築できるように、現在の状態をシリアル化する必要があります。

だから、このようなもの:

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クラスのイベント)を一時停止したときに状態オブジェクトを保存します。

これを行うことで、ビューモデル自体ではなく、ビューモデルの状態を保存できます。シリアル化サービスを制御するため、使用するシリアル化方法を使用してデータを保存できます。

于 2013-01-10T10:37:14.990 に答える