我有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条记录。问题:如何实现此实现?请帮助实现和代码...
答案 0 :(得分:2)
看起来容易实现:
创建一个名为eg的方法ClearUnnecessaryData
课程ViewModel
并在那里进行清洁。
在序列化之前调用该方法。
方法看起来应该是这样的:
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);
}
}
}