C# 无法从WP7应用程序中的隔离存储设置中检索可观察到的集合

C# 无法从WP7应用程序中的隔离存储设置中检索可观察到的集合,c#,windows-phone-7,C#,Windows Phone 7,我正在应用程序隔离存储设置中存储可观察的集合。在应用程序退出期间,列表已成功保存。但是,当我再次启动应用程序时,它无法从隔离存储中找到存储的密钥 这是我的密码 void LoadSettings() { if (settings.Contains("DiaryItems")) { diaryItems = (ObservableCollection<MyDiaryItem>)settings["DiaryItem

我正在应用程序隔离存储设置中存储可观察的集合。在应用程序退出期间,列表已成功保存。但是,当我再次启动应用程序时,它无法从隔离存储中找到存储的密钥

这是我的密码

    void LoadSettings()
    {
        if (settings.Contains("DiaryItems"))
        {
            diaryItems = (ObservableCollection<MyDiaryItem>)settings["DiaryItems"];
        }
    }

    void SaveSettings()
    {
        settings["DiaryItems"] = diaryItems;
    }
void LoadSettings()
{
if(settings.Contains(“DiaryItems”))
{
diaryItems=(ObservableCollection)设置[“diaryItems”];
}
}
void SaveSettings()
{
设置[“日记项”]=日记项;
}
在应用程序关闭和应用程序停用期间,我正在调用
SaveSettings
方法

在应用程序启动和应用程序激活期间,我正在调用
LoadSettings
方法

当我调试时,我可以看到这样的错误

'settings[“DiaryItems”]”引发了类型为
'System.Collections.Generic.KeyNotFoundException'


只是想知道设置有什么问题。同样的代码适用于简单的列表类型。

实际上,当您想在隔离存储中存储任何项目时,必须调用“保存应用程序设置”函数

因此,按如下所示修改保存函数:

void SaveSettings()
    {
        settings["DiaryItems"] = diaryItems;
        settings.Save();
    }

对不起,我忘了告诉你,你的MyDiaryItem应该是可正确序列化的

实际上,当您要在IsolatedStorage中存储任何项时,必须调用save of ApplicationSettings函数

因此,按如下所示修改保存函数:

void SaveSettings()
    {
        settings["DiaryItems"] = diaryItems;
        settings.Save();
    }

对不起,我忘了告诉你,你的MyDiaryItem应该是可正确序列化的

请注意为什么它不起作用,但您可以尝试将您的ObservableCollection包装在列表中:

void LoadSettings()
{
    if (settings.Contains("DiaryItems"))
    {
        diaryItems = new ObservableCollection<MyDiaryItem>((List<MyDiaryItem>)settings["DiaryItems"]);
    }
}

void SaveSettings()
{
    settings["DiaryItems"] = diaryItems.ToList();
}
void LoadSettings()
{
if(settings.Contains(“DiaryItems”))
{
diaryItems=新的ObservableCollection((列表)设置[“diaryItems”]);
}
}
void SaveSettings()
{
设置[“日记项”]=DiaryItems.ToList();
}

您需要有
使用System.Linq,否则“ToList”将不起作用。

请确定它不起作用的原因,但您可以尝试将ObservableCollection包装到列表中:

void LoadSettings()
{
    if (settings.Contains("DiaryItems"))
    {
        diaryItems = new ObservableCollection<MyDiaryItem>((List<MyDiaryItem>)settings["DiaryItems"]);
    }
}

void SaveSettings()
{
    settings["DiaryItems"] = diaryItems.ToList();
}
void LoadSettings()
{
if(settings.Contains(“DiaryItems”))
{
diaryItems=新的ObservableCollection((列表)设置[“diaryItems”]);
}
}
void SaveSettings()
{
设置[“日记项”]=DiaryItems.ToList();
}

您需要有
使用System.Linq位于文件顶部,否则“ToList”将不起作用。

尝试使用添加功能在字典中添加数据 像


通过这种方式,它会添加值

尝试使用添加功能在字典中添加数据 像


通过这种方式,它添加了一个值

,真奇怪,它似乎在没有设置的情况下对普通列表有效;是,我使用了设置[“日记项”]=日记项;设置。保存();真奇怪,它似乎在没有设置的情况下对普通列表有效。Save();是,我使用了设置[“日记项”]=日记项;设置。保存();事实上,我发现了背后真正的问题。当应用程序退出时,可观察的集合将被存储到独立的存储中。但当我试图从独立存储中获取列表时,它是空的。不知道为什么列表不能从独立存储中获取其他设置是否存在相同的问题,或者仅在ObservableCollection中存在相同的问题?无法找出问题的根源。它应该是我存储到独立存储的方式,或者是我试图获取它的方式。是否有任何其他解决方案可以帮助将可观察集合存储到独立存储?是的,我尝试了您的代码,但仍然无法从独立存储中正确获取存储列表。void LoadSettings(){if(settings.Contains(“DiaryItems”){DiaryItems=new observedcollection((列表)设置[“日记项”];}}void SaveSettings(){settings[“日记项”]=DiaryItems.ToList();settings.Save();}实际上,我发现了真正的问题。当应用程序退出时,可观察集合正在存储到独立存储。但是当我试图从独立存储获取列表时,它是空的。不知道为什么列表没有从独立存储获取其他设置,还是仅在Obser中存在相同的问题vableCollection?无法找出问题来自何处。这应该是我将其存储到独立存储的方式,或者是我尝试获取它的方式。是否有其他解决方案将可观察到的集合存储到独立存储,这可能会有所帮助?是的,我尝试了您的代码,但仍然无法获取stor正确地从隔离存储中删除列表。void LoadSettings(){if(settings.Contains(“DiaryItems”){DiaryItems=newobserveCollection((list)settings[“DiaryItems”]);}}}void SaveSettings(){settings[“DiaryItems”]=diaryItems.ToList();settings.Save();}