序列化ViewModel,ObservableCollection

时间:2013-03-18 18:04:09

标签: c# windows-phone-7 mvvm windows-phone-8

我有2个ObservableColection的ViewModel,当我的应用程序关闭时,我序列化我的ViewModel。

我的代码:

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; }
        }

一切正常,但我不明白如何采取,例如,每个集合有六个记录,然后序列化ViewModel ...我怎么能这样做?例如,如果EpsItems和OthItems包含20个条目。

提前致谢。抱歉我的英语不好^^

UPD:这是一个例子,我将描述我想要的内容,但不知道如何...... 例如:当用户关闭应用程序视图模型序列化时,用户已为EpsItems下载了30个条目,为OthItems下载了25个条目。我分别存储了30个和25个条目。我希望在集合中保存的条目少于用户下载...例如,每个集合的10条记录。问题:如何实现此实现?请帮助实现和代码...

1 个答案:

答案 0 :(得分:2)

看起来容易实现:

  1. 创建一个名为eg的方法ClearUnnecessaryData课程ViewModel并在那里进行清洁。

  2. 在序列化之前调用该方法。

  3. 方法看起来应该是这样的:

    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);
            }
        }
    }