这实际上是Storing data on Windows phone的后续行动。
我有一个加载收藏页面的应用。如果收藏页面为空,则用户可以单击收藏页面上的搜索按钮,该搜索按钮加载搜索页面。在那里,他们可以搜索信息并将其保存为收藏夹。我保存收藏夹的代码如下。
stopNumber = txtBusStopNumber.Text;
IsolatedStorageSettings favouriteStops = IsolatedStorageSettings.ApplicationSettings;
if (!favouriteStops.Contains(stopNumber))
{
favouriteStops.Add(stopNumber, stopAddress);
favouriteStops.Save();
MessageBox.Show("Favourite saved!");
}
应用程序的工作方式,一旦用户添加了他们的收藏夹,他们将导航回上一页(收藏页面)。当他们导航回收藏页面时,需要通过搜索页面加载刚刚添加到IsolatedStorage的信息。
我知道代码需要在收藏页面的OnNavigatedTo事件中,但问题是,我的代码似乎没有读取任何数据。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (IsolatedStorageSettings.ApplicationSettings.Contains("stopNumber"))
{
for (int i = 0; i < IsolatedStorageSettings.ApplicationSettings.Count; i++)
{
lstStops.Items.Add(IsolatedStorageSettings.ApplicationSettings["stopNumber"] as string);
}
}
base.OnNavigatedTo(e);
}
这是因为在收藏页面上,声明了IsolatedStorage
的其他一些不包含任何数据的实例吗?如何访问搜索页面上保存到IsolatedStorage
的数据,并通过它迭代查找所有信息?
答案 0 :(得分:2)
尝试类似
的内容protected override void OnNavigatedTo(NavigationEventArgs e)
{
foreach( KeyValuePair<string, Object> entry in IsolatedStorageSettings.ApplicationSettings)
{
lstStops.Items.Add(entry.Value as String);
}
base.OnNavigatedTo(e);
}
它会迭代您存储的设置,并将每个设置的值加载到列表中。如果您想使用stopNumber
,也可以获取密钥(代码中为entry.Key
)。
答案 1 :(得分:1)
在你的循环中,你每次都尝试阅读所有元素的“stopNumber”(我想要做的事情)。也许尝试这样做:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
for (int i = 0; i < IsolatedStorageSettings.ApplicationSettings.Count; i++)
{
lstStops.Items.Add(IsolatedStorageSettings.ApplicationSettings.ElementAt(i).Value as string);
}
base.OnNavigatedTo(e);
}
上面的代码很糟糕,因为有一点 - 在IsolatedStorageSettings中你可以保存更多的东西 - 不仅是你的stopNumbers - 而且这个循环也会使用这些变量 - 这可能会引发异常。
另一方面,我建议使用IsolatedStorageFile而不是IsolatedStorageSettings。使用您的数据和serialize it创建一个类。
答案 2 :(得分:0)
由于我的声誉,我还不能评论答案,但请谨慎使用steveg89的解决方案。如果您在任何时候向与您的“收藏夹”无关的IsolatedStorageSettings添加更多值,那么在使用他的方法时也会迭代这些值。
我建议将所有“收藏夹”存储在字典中,然后保存IsolatedStorageSettings。当您想要添加新条目时,只需从设置中加载字典,检查字典中是否存在该值,如果不存在,则重新保存到IsolatedStorageSettings。
然后,为了加载这些值,只需加载Dictionary并反复遍历它。
这样的事情:
//Loading items into Dictionary
Dictionary<string, string> tempDictionary = new Dictionary<string, string>();
if (IsolatedStorageSettings.ApplicationSettings.Contains("stopNumberDictionary"))
{
tempDictionary = IsolatedStorageSettings.ApplicationSettings["stopNumberDictionary"] as Dictionary<string, string>;
}
else
{
IsolatedStorageSettings.ApplicationSettings.Add("stopNumberDictionary", tempDictionary);
}
if (!tempDictionary.Contains(stopNumber))
{
tempDictionary.Add(stopNumber, stopAddress);
}
IsolatedStorageSettings.ApplicationSettings["stopNumberDictionary"] = tempDictionary;
IsolatedStorageSettings.ApplicationSettings.Save();
//Then load Dictionary OnNavigatedTo
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Dictionary<string, string> tempDictionary = new Dictionary<string, string>();
if (IsolatedStorageSettings.ApplicationSettings.Contains("stopNumberDictionary"))
{
tempDictionary = IsolatedStorageSettings.ApplicationSettings["stopNumber"] as Dictionary<string, string>;
}
foreach(KeyValuePair<string, string> entry in tempDictionary)
{
lstStops.Items.Add(entry.Value as string);
}
base.OnNavigatedTo(e);
}