2013-01-09 5 views
0

Windows 8 Store 앱에서 MVVMLight를 시작합니다. 몇 가지 동영상을 본 후에 기본 작업을하고 있습니다. 그러나 나는 문제에 부딪쳤다. 내 기본 모델 클래스는 각각 MVVMLight의 ObservableObject에서 상속받습니다.MVVMLight 및 데이터 직렬화

괜찮 았지만 지금은 XML로 데이터를로드하고 저장하려고합니다. 그래서 이전에 비 MVVM 구현에서 사용했던 DataContract 특성으로 표시했습니다. 그러나 이것은 상속 된 클래스가이 속성으로 표시되어야한다는 이유로 직렬화시 오류가 발생합니다.

마찬가지로 ObservableCollection은 dll에서 컴파일됩니다. 어떻게 관리해야합니까? 내 "ViewModel"스타일 클래스와 일치하는 기본 (POCO 스타일) 클래스 세트를 만들어야하며 이들 사이의 매핑을 처리해야합니다. 아니면 더 좋은 방법이 있습니까?

답변

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 클래스의 이벤트).

이렇게하면 뷰 모델 자체가 아닌 뷰 모델의 상태를 저장할 수 있습니다. 우리는 직렬화 서비스를 제어하기 때문에 우리가 사용하고자하는 직렬화 방법을 사용하여 데이터를 저장할 수 있습니다.

+0

하지만이 ISerializationService와 그 구현은 어떻게 생겼을까요? – VivekDev