2014-02-15 2 views
0

Im using VS для разработки приложения для Windows Phone. Я делаю это wp8, но это не имеет значения, потому что код работает и для 7. Во всяком случае, у меня есть текстовое поле и кнопка. Когда текст из текстового поля вводится, и нажимается кнопка, он добавляет это в изолированное хранилище. На моей другой странице у меня есть текстовый блок. Что должно отображать то, что я написал в текстовом поле. Он действительно работает, но сначала позвольте мне показать вам мой код.изолированное хранилище в windows phone developement

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 
} 

Проблема заключается в том, что «имя» работает. Однако, если я это называю НИЧЕГО, это не так. Я хочу добавить другое имя, потому что хочу иметь возможность вводить два лота. Например, два текстовых поля, а затем, когда вы нажимаете кнопку и переходите на другую страницу, у нее есть два текстовых блока, отображающих каждую строку в каждом из них. Я не могу это сделать, потому что работает только «имя». Я изменил его на другие имена, и он не работает. Кто-нибудь знает, почему?

+0

Что значит «НИЧЕГО?»? Вы добавили ключ в словарь перед его использованием? – Romasz

+0

, например, если я изменю его; if (appsettings.Contains ("title")) { appsettings.Remove ("title"); appsettings.Add ("title", TitleTextBox.Text); } не будет работать – user2903379

+0

Наверное, нет.Но им не известно делать это раньше для «имени» либо – user2903379

ответ

1

IsolatedStorageSettings работает как словарь. Если вы хотите получить конкретный ключ, он должен существовать в словаре.

Если вы попытаетесь изменить значение, которое уже существует вы можете сделать так:

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

Не также забудьте сохранить AppSettings:

appSettings.Save(); 

А также в соответствии с вашим кодом - в МКС вы можете поставить не только string - это может быть любой объект, если вы хотите его получить, вы должны сделать литье или использовать as:

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

EDIT - после комментариев, перестраивать еще раз

Если вы хотите иметь дела-список, и вы знаете, что каждая задача имеет свое конкретный заголовок, описание и время, то я бы посоветовал создать специальный класс для этого, например:

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> и быть в курсе, что МКС Шоул также обрабатывать это:

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>; 
+0

Я не хочу менять значение, которое уже существует, я хочу иметь возможность добавьте два текстовых поля с текстовыми блоками. Я хочу иметь if (appsettings.Contains («name»)) { appsettings.Remove («name»); appsettings.Add ("name", TitleTextBox.Text); } и , если (appsettings.Contains ("название")) { appsettings.Remove ("название"); appsettings.Add ("title", TitleTextBox.Text); // переименовать, если он уже существует } – user2903379

+0

Подождите, как я понимаю - вы хотите изменить значение - если вы его удалите, а затем добавите тот же тип - вы его меняете. Я также удивляюсь, какова цель сохранения одного и того же значения в двух местах, но может потребоваться, если вы хотите изменить их где-то еще. – Romasz

+0

Привет, Ромаш, спасибо за ваши ответы. Дело в том, чтобы нести два элемента, например, список дел. Первое текстовое поле - это имя задачи, а второе текстовое поле - описание задачи, например Name: «Clean» description: «clean room». Когда кнопка нажата и сохранена, пользователь может ее просмотреть. На другой странице показан текстовый блок, который является названием задачи. а второй текстовый блок содержит описание задачи. – user2903379

Смежные вопросы