【发布时间】:2013-05-27 21:04:18
【问题描述】:
我正在制作一个要求用户输入的 Windows 应用商店应用程序,然后根据该输入生成一堆图钉。当点击图钉时,应用会导航到更详细的页面。
现在我遇到的问题是: 我的页面都继承自自动生成的 LayoutAwarePage,因此我可能会使用 SaveState 和 LoadState 来保存图钉,这样它们就不会在导航时被擦除。问题是我无法将引脚保存到 SaveState 提供的 Dictionary 对象中。
我得到的错误是“值不能为空”,它指的是 LayoutAwarePage.OnNavigatedFrom() 中的 _pageKey 变量,我不知道为什么会这样。
我尝试将它们序列化为 JSON 字符串,以便在 LoadState 中对其进行反序列化,但我使用字符串或 UIelement 列表得到相同的结果。
我认为这都是由于我对 SaveState、LayoutAwarePAge 和 SuspensionManager 的工作原理缺乏了解。我认为我正在做的事情会起作用,因为 Dictionary 只要求一个字符串和一个对象。
我没有使用 LayoutAwarePage 中的任何其他方法,所以如果有比使用 SaveState 和 LoadState 更好的方法,我会全力以赴。
这是我尝试过的两个 SaveState 版本:
使用 JSON
protected override void SaveState(Dictionary<String, Object> pageState)
{
List<string> pindata = new List<string>();
List<string> serialisedpins = new List<string>();
foreach (Pushpin ele in map.Children)
{
pindata = ele.Tag as List<string>;
serialisedpins.Add(JsonConvert.SerializeObject(pindata));
}
string jasoned = JsonConvert.SerializeObject(serialisedpins);
pageState["pins"] = jasoned;
}
使用 UIElement 列表
protected override void SaveState(Dictionary<String, Object> pageState)
{
List<UIElement> pins = new List<UIElement>(map.Children);
pageState["pins"] = pins;
}
【问题讨论】:
标签: windows-8 windows-runtime microsoft-metro windows-store-apps bing-maps