我正在针对Windows 8应用商店应用MVVMLight。观看一些视频后,我已经掌握了基本知识。但是我遇到了一个问题。我的每个基本模型类都继承自MVVMLight中的ObservableObject。
这很好,但是我现在想将数据加载并保存到XML。因此,我用之前在非MVVM实现中使用的DataContract属性标记了它们。但是,这现在在序列化时会产生错误,因为它说我继承的类也必须使用此属性进行标记。
由于ObservableCollection是在dll中编译的,我该如何管理它?我是否需要创建一组与我的“ ViewModel”样式匹配的基本(POCO样式)类,并处理它们之间的映射。还是有更好的方法?
您不想序列化您的视图模型,您想要序列化它们的当前状态,以便它们在重新启动应用程序时可以自行重建。
所以,类似这样:
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类中的事件)时,我们将保存状态对象。
通过执行此操作,我们可以存储视图模型的状态,而不是视图模型本身。因为我们控制序列化服务,所以可以使用我们要使用的任何序列化方法来保存数据。
使用Json.Net允许基于GalaSoft.MvvmLight.ObservableObject
对类进行序列化和反序列化。如果可以使用此库,那似乎是最简单的解决方案。