从另一个页面访问IsolatedStorage Windows phone 8

时间:2014-01-16 20:18:57

标签: c# windows-phone-8 navigation isolatedstorage

这实际上是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的数据,并通过它迭代查找所有信息?

3 个答案:

答案 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);
}