2010-12-29 44 views
6

Sto provando a fare un semplice test con Storage isolato in modo da poterlo utilizzare per un'applicazione Windows Phone 7 che sto facendo.Simple Isolated Storage Problema

Il test che sto creando imposta a crea una chiave e un valore con un pulsante e con l'altro pulsante imposta tale valore uguale al testo di 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"]; 
     } 
    }  
} 
} 

In questo modo mi dà questo errore:

Impossibile accedere a un membro non statica di tipo esterno 'IsoStore.MainPage' via tipo annidato 'IsoStore.MainPage.AppSettings'

così ho provato questo:

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

E invece ottengo questo errore:

Il nome 'app ettings 'non esiste nel contesto attuale

Quindi quale ovvio problema sto trascurando qui?

Grazie mille per il vostro tempo.

risposta

4

appsettings è fuori portata per button2_Click

Aggiornamento Dal IsolatedStorageSettings.ApplicationSettings è statico in ogni caso non c'è bisogno per il riferimento a tutti. Basta accedervi direttamente.

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

Quindi non ho nemmeno bisogno di creare l'istanza "appSettings" di IsolatedStorage? Ci sarebbe un vantaggio se lo facessi? – Dan

+0

@ No non proprio. Potresti discutere di leggibilità, ma è piuttosto sottile. –

+0

Bene, grazie ancora per tutto il vostro aiuto. – Dan

0

Provare questo codice, in quanto non è necessario definire la classe 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

Anche questo funziona perfettamente. Perché il tuo non ha richiesto la definizione statica? – Dan

+0

La durata di vita dell'ambito statico è a livello di classe, quindi quando MainPage verrà caricato dal CLR verrà creato anche il riferimento statico di appSettings. Mentre sei nel tuo codice, stai solo accedendo alla variabile appSettings all'interno dei metodi dei membri MainPage (non statici), quindi è meglio tenerlo anche come variabile membro, e verrà distrutto quando l'oggetto uscirà dall'ambito. – ShahidAzim

+0

hai ragione, ma a) poiché IsolatedStorageSettings.ApplicationSettings è già statico tutto ciò che stai salvando utilizzando un riferimento non statico è un intero 8 byte eb) poiché MainPage probabilmente ha lo stesso ciclo di vita dell'applicazione, probabilmente è un risparmio di 0 byte. –