2010-12-29 4 views
6

Я пытаюсь сделать простой тест с изолированным хранилищем, поэтому я могу использовать его для приложения Windows Phone 7, которое я делаю.Простая проблема с изолированным хранилищем

Тест, который я создаю, устанавливает a, создает ключ и значение с помощью одной кнопки, а с другой кнопкой устанавливает это значение, равное тексту TextBlock.

namespace IsoStore 
{ 
public partial class MainPage : PhoneApplicationPage 
{ 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    public class AppSettings 
    { 
     IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings; 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      appSettings.Add("email", "[email protected]"); 
     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      textBlock1.Text = (string)appSettings["email"]; 
     } 
    }  
} 
} 

Этот способ дает мне эту ошибку:

не удается получить доступ к нестатическому члену внешнего типу «IsoStore.MainPage» с помощью вложенного типа «» IsoStore.MainPage.AppSettings

Так что я попытался это:

namespace IsoStore 
{ 
public partial class MainPage : PhoneApplicationPage 
{ 
    // Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
    } 

    public class AppSettings 
    { 
     IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings; 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      appSettings.Add("email", "[email protected]"); 
     } 

    } 

    private void button2_Click(object sender, RoutedEventArgs e) 
    { 
     textBlock1.Text = (string)appSettings["email"]; 
    } 
} 
} 

И вместо этого я получаю эту ошибку:

название «APPS ettings 'не существует в текущем контексте

Итак, какую очевидную проблему я не вижу здесь?

Большое спасибо за ваше время.

ответ

4

AppSettings выходит за рамки для button2_Click

Update Поскольку IsolatedStorageSettings.ApplicationSettings является статическим, так или иначе, нет никакой необходимости для ссылки на всех. Просто войдите в него.

namespace IsoStore 
{ 

public partial class MainPage : PhoneApplicationPage 
{ 


    // Constructor 
    public MainPage() 
    { 
    InitializeComponent(); 


    } 


    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
    IsolatedStorageSettings.ApplicationSettings.Add("email", "[email protected]"); 
    } 



    private void button2_Click(object sender, RoutedEventArgs e) 
    { 
     textBlock1.Text = (string)IsolatedStorageSettings.ApplicationSettings["email"]; 
    } 
    } 
} 
+0

Таким образом, мне даже не нужно создавать экземпляр «appSettings» для Изолированного хранилища? Будет ли польза, если я это сделаю? – Dan

+0

@ Не знаю, нет. Вы можете сделать аргумент для удобочитаемости, но это довольно тонко. –

+0

Хорошо, спасибо вам большое за вашу помощь. – Dan

0

Пробуйте этот код, так как нет необходимости определять класс AppSettings.

namespace IsoStore 
{ 
    public partial class MainPage : PhoneApplicationPage 
    { 
     IsolatedStorageSettings appSettings; 

     // Constructor 
     public MainPage() 
     { 
      InitializeComponent(); 
      appSettings = IsolatedStorageSettings.ApplicationSettings; 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      appSettings.Add("email", "[email protected]"); 
     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      textBlock1.Text = (string)appSettings["email"]; 
     } 
    } 
} 
+0

Это прекрасно работает. Почему вам не требуется статическое определение? – Dan

+0

Срок службы статической области находится на уровне класса, поэтому, когда MainPage будет загружен CLR, будет также создана статическая ссылка appSettings. Хотя в вашем коде вы получаете доступ только к переменной appSettings в методах члена MainPage (нестатический), поэтому лучше сохранить ее также как переменную-член, и она будет уничтожена, когда объект выйдет из области видимости. – ShahidAzim

+0

вы правы, но a) поскольку IsolStorageSettings.ApplicationSettings уже является статическим, все, что вы сохраняете, используя нестатические ссылки - это целые 8 байтов и b), поскольку MainPage, вероятно, имеет тот же жизненный цикл, что и приложение, вероятно, на самом деле экономит 0 байт. –