1

我开始使用适用于 Windows 8 应用商店应用的 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 回答
0

使用Json.Net允许序列化和反序列化基于GalaSoft.MvvmLight.ObservableObject. 如果你可以使用这个库,它似乎是最简单的解决方案。

于 2019-11-07T21:27:36.040 回答