我需要在PhoneApplicationService.Current.State[]
中存储和检索列表,但这不是字符串或整数列表:
public class searchResults
{
public string title { get; set; }
public string description { get; set; }
}
public List<searchResults> resultData = new List<searchResults>()
{
//
};
结果的值是从互联网上获取的,当切换应用程序时,这些数据需要保存在独立存储中以进行多任务处理。如何保存此列表并再次检索?
答案 0 :(得分:2)
如果问题确实是关于如何保存数据,那么你只需要
PhoneApplicationService.Current.State["SearchResultList"] = resultData;
再次检索
List<searchResults> loadedResultData = (List<searchResults>)PhoneApplicationService.Current.State["SearchResultList"];
这是一份完整的工作样本:
// your list for results
List<searchResults> resultData = new List<searchResults>();
// add some example data to save
resultData.Add(new searchResults() { description = "A description", title = "A title" });
resultData.Add(new searchResults() { description = "Another description", title = "Another title" });
// save list of search results to app state
PhoneApplicationService.Current.State["SearchResultList"] = resultData;
// --------------------->
// your app could now be tombstoned
// <---------------------
// load from app state
List<searchResults> loadedResultData = (List<searchResults>)PhoneApplicationService.Current.State["SearchResultList"];
// check if loading from app state succeeded
foreach (searchResults result in loadedResultData)
{
System.Diagnostics.Debug.WriteLine(result.title);
}
(当数据结构变得更复杂或包含某些类型时,这可能会停止工作。)
答案 1 :(得分:0)
听起来您只想对列表对象使用标准序列化,请参阅MSDN文档中的内容 http://msdn.microsoft.com/en-us/library/ms973893.aspx
或者,如果您想要可以在应用程序之外编辑的内容,还可以使用XML序列化(您也可以使用隔离存储过滤器来获取文件并稍后进行编辑) http://msdn.microsoft.com/en-us/library/182eeyhh(v=vs.71).aspx
或者我也建议尝试Matt Lacey的Tombstone Helper项目,它可以为你简化这个 http://tombstonehelper.codeplex.com/
答案 2 :(得分:0)
Heinrich的答案已经总结了这里的主要想法 - 您可以将PhoneApplicationService.State与Lists一起使用,就像使用任何对象一样。查看有关保留应用程序状态的MSDN文档:How to: Preserve and Restore Application State for Windows Phone。有一点需要注意:
您存储在State字典中的任何数据都必须是可序列化的, 直接或使用数据合同。
这里直接表示类被标记为[Serializable]。关于List<searchResults>
,如果searchResults
可序列化,则可序列化。要执行此操作,searchResults
及其引用的所有类型都必须使用[Serializable]
进行标记,或者必须是合适的数据合同,请参阅Using Data Contracts和Serializable Types。简而言之,确保该类声明为public,并且它具有公共的无参数构造函数。