2010-12-29 15 views
6

Próbuję wykonać prosty test z odizolowaną pamięcią masową, dzięki czemu mogę go używać do aplikacji Windows Phone 7, którą tworzę.Problem z prostym izolowanym przechowywaniem

Test, który tworzę, ustawia a tworzy klucz i wartość za pomocą jednego przycisku, a za pomocą drugiego przycisku ustawia tę wartość równą tekstowi 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"]; 
     } 
    }  
} 
} 

ten sposób daje mi ten błąd:

nie można uzyskać dostępu do non-statycznego elementu zewnętrznego typu „IsoStore.MainPage” poprzez zagnieżdżonego typu więc próbowałem „IsoStore.MainPage.AppSettings”

to:

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"]; 
    } 
} 
} 

I zamiast ja dostać ten błąd:

nazwa „Aplikacje ettings "nie istnieje w obecnym kontekście

Więc jaki oczywisty problem mam tutaj?

Dziękuję bardzo za poświęcony czas.

Odpowiedz

4

appSettings jest poza zakresem dla button2_Click

Aktualizacja Od IsolatedStorageSettings.ApplicationSettings jest statyczna i tak nie ma potrzeby odniesienia w ogóle. Bezpośrednio do niego dostęp.

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

Czyli nie muszę nawet tworzyć instancji "appSettings" IsolatedStorage? Czy byłby to jakiś pożytek? – Dan

+0

@ Nie, nie tak naprawdę. Możesz argumentować za czytelnością, ale to jest dość cienkie. –

+0

Cóż, jeszcze raz bardzo dziękuję za całą pomoc. – Dan

0

Spróbuj tego kodu, ponieważ nie ma potrzeby definiowania klasy 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

Działa to również doskonale. Dlaczego twój nie wymagał statycznej definicji? – Dan

+0

Czas życia zakresu statycznego znajduje się na poziomie klasy, dlatego podczas ładowania strony MainPage przez CLR zostanie również utworzone odniesienie statyczne aplikacji. W kodzie masz dostęp tylko do zmiennej appSettings w obrębie metod członków MainPage (niestatycznych), dlatego lepiej zachować ją również jako zmienną składową, a zostanie ona zniszczona, gdy obiekt znajdzie się poza zasięgiem. – ShahidAzim

+0

masz rację, ale a) ponieważ IsolatedStorageSettings.ApplicationSettings jest już statyczna, wszystko, co zapisujesz przy użyciu niestatycznego odnośnika, to całe 8 bajtów ib), ponieważ MainPage prawdopodobnie ma taki sam cykl życia, jak aplikacja, co prawdopodobnie oznacza oszczędności 0 bajtów. –

Powiązane problemy