1

我有带有 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:这是一个示例,我将描述我想要的内容,但不知道如何...例如:当用户关闭序列化的应用程序视图模型时,用户下载了 30 个 EpsItems 条目和 25 个 OthItems 条目。我分别保存了 30 个和 25 个条目。我想在集合中保存比用户下载更少的条目......例如,每个集合的 10 条记录。问题:如何进行此实现?请帮助实现和代码...

4

1 回答 1

2

看起来很容易实现:

  1. ClearUnnecessaryData在您的ViewModel类中创建一个名为 eg 的方法并在那里进行清理。

  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);
        }
    }
}
于 2013-03-19T07:52:26.743 回答