Windows手机开发中的隔离存储

时间:2014-02-15 14:39:54

标签: windows-phone-7 windows-phone-8

我使用VS开发Windows手机应用程序。我这样做wp8但它并不重要,因为它的代码也适用于7。无论如何,我有一个文本框和一个按钮。输入文本框中的文本并单击该按钮后,将其添加到隔离存储中。 在我的另一页上,我有一个文本块。哪个应该显示我在文本框中写的内容。它确实有效,但首先让我告诉你我的代码。

if (appsettings.Contains("name"))
{
   appsettings.Remove("name");
   appsettings.Add("name", TitleTextBox.Text); //rename if already exists
}

然后收集信息的第二页在下面。

if (appsettings.Contains("name"))
{
   string content = appsettings["name"].ToString(); //converts to string
   titleTextBlock.Text = content; //shows title in text block 
}

问题是,“名称”有效。但是,如果我将其称为其他任何东西,它就不会。我想添加一个不同的名称,因为我希望能够输入两个批次。例如两个文本框然后当你按下按钮并转到另一个页面时,它有两个文本块显示每个文本框中的每个字符串。我似乎无法做到这一点因为只有“名字”有效。我已将其更改为其他名称,但它不起作用。有谁知道为什么?

1 个答案:

答案 0 :(得分:1)

IsolatedStorageSettings用作词典。如果要访问特定键,它应该存在于词典中。

如果您尝试更改已存在的值,可以这样做:

if (appSettings.Contains("key")) appSettings["key"] = "new value";
else appSettings.Add("key", "new value");

不要忘记保存您的appSettings:

appSettings.Save();

根据您的代码 - 在ISS中,您不仅可以放string - 它可以是任何对象,如果您想获得它,您应该进行演员表或使用as:< / p>

string content = (string)appsettings["name"]; //converts to string
string content = appsettings["name"] as string; 

编辑 - 评论后,再次重建

如果你想要一个待办事项列表并且你知道每个任务都有其特定的标题,描述和时间,那么我建议为此创建一个特殊的类,例如:

public class myTodo
{
    public string TaskTitle { get; set; }
    public string TaskDescription { get; set; }
    public TimeSpan ElapsedTime { get; set; }
}

我使用了TimeSpan,因为我认为用它来管理时间会更容易。然后,如果您要保存/加载myTodo,可以这样做:

// create an example of your task
myTodo newTask = new myTodo() { TaskTitle = "Clean", TaskDescription = "Clean room", ElapsedTime = new TimeSpan(2, 0, 0) };

// add it to ISS and save
if (appSettings.Contains("firatTask")) appSettings["firatTask"] = newTask;
else appSettings.Add("firatTask", newTask);
appSettings.Save();

// try to load
myTodo read = appSettings["firatTask"] as myTodo;

您可以像这样访问您的项目:

read.Title = TitleTextBox.Text; // and so on

考虑制作一个List<myToDo>并注意ISS也应该处理这个问题:

List<myTodo> listJob = new List<myTodo>();
listJob.Add(firstTask); // firstTask is myToDo
listJob.Add(secondTask); // secondTask is myToDo

if (appSettings.Contains("listTask")) appSettings["listTask"] = listJob;
else appSettings.Add("listTask", listJob);
appSettings.Save();

List<myTodo> readList = appSettings["listTask"] as List<myTodo>;