2013-03-18 66 views
1

我有ViewModel與2 ObservableCollection,當我的應用程序關閉時,我序列化我的ViewModel。Serialize ViewModel,ObservableCollection

我的代碼:

private void Application_Closing(object sender, ClosingEventArgs e) 
    { 
     using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      using (var stream = new IsolatedStorageFileStream("data.txt", FileMode.Create, FileAccess.Write, store)) 
      { 
       var serializer = new XmlSerializer(typeof(AppViewModel.NewsViewModel)); 
       serializer.Serialize(stream, ViewModel); 
      } 
     } 
    } 

AppViewModel.NewsViewModel包含

public ObservableCollection<NewsItemViewModel> EpsItems 
      { 
       get { return _epsItems; } 
      } 


      public ObservableCollection<NewsItemViewModel> OthItems 
      { 
       get { return _othItems; } 
      } 

和方法,通過該填充集合。

NewsItemViewModel:

public class NewsItemViewModel 
     { 
      public NewsItemViewModel() 
      { 
      } 

      public int Id { get; set; } 
      public DateTime Date { get; set; } 
      public string Title { get; set; } 
      public string Text { get; set; } 
      public string FullText { get; set; } 
      public string ImageUrl { get; set; } 
      public string NewsUrl { get; set; } 
     } 

一切工作正常,但我不明白如何利用,例如,六個記錄採取每個集合,之後進行序列化的視圖模型......我怎樣才能做到這一點?例如,如果EpsItems和OthItems包含20個條目。

在此先感謝。很遺憾我的英語不好^^

UPD:下面是一個例子,我將介紹我想要的東西,但不知道怎麼... 例如:用戶下載了30項用於EpsItems和25 OthItems的條目,當他關閉應用程序viewmodel序列化。我分別保存了30個和25個條目。我想要保存更少的條目集合比用戶下載...例如,每個集合的10條記錄。問題:我如何做這個實現?請執行和代碼幫助...

+0

你也可以說再現問題一個完整的例子? – 2013-03-18 18:24:31

+0

@MattLacey發佈了 – 2013-03-18 19:02:31

+0

爲什麼要序列化viewmodel?你能否詳細解釋一下實際問題是什麼。對你底部的解釋是對我的誤導。 – 2013-03-18 19:06:05

回答

2

看起來很容易實現:

  1. 創建一個名爲例如方法ClearUnnecessaryData在你的ViewModel班,並在那裏進行清潔。

  2. 在序列化之前調用該方法。

方法應該看起來像:

for(int i = MAX_SERIALIZATION_ITEMS; i < EpsItems.Count;) 
{ 
    EpsItems.RemoveAt(MAX_SERIALIZATION_ITEMS); 
} 

for(int i = MAX_SERIALIZATION_ITEMS; i < OthItems.Count;) 
{ 
    OthItems.RemoveAt(MAX_SERIALIZATION_ITEMS); 
} 

而且你ApplicationClosing事件處理程序應該是:

private void Application_Closing(object sender, ClosingEventArgs e) 
{ 
    ViewModel.ClearUnnecessaryData(); 

    using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
     using (var stream = new IsolatedStorageFileStream("data.txt", FileMode.Create, FileAccess.Write, store)) 
     { 
      var serializer = new XmlSerializer(typeof(AppViewModel.NewsViewModel)); 
      serializer.Serialize(stream, ViewModel); 
     } 
    } 
} 
+0

謝謝,這是個好主意=)但爲了一切工作正常,我必須刪除i ++。) – 2013-03-19 10:02:28

+0

你是對的!更新了我的答案。 – MarcinJuraszek 2013-03-19 10:07:15