2010-12-29 17 views
6

隔離型ストレージで簡単なテストをしようとしています。作成しているWindows Phone 7アプリケーションで使用できます。単純隔離型ストレージの問題

セットを作成しているテストでは、1つのボタンでキーと値を作成し、もう1つのボタンでその値を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 IsolatedStorageSettings.ApplicationSettingsのでbutton2_Click

の範囲外の更新

でとにかく静的であるすべての参照は必要ありません。ただそれに直接アクセスしてください。

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

したがって、IsolatedStorageの「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

静的スコープの有効期間はクラスレベルであるため、CLRによってMainPageが読み込まれると、appSettingsの静的参照も作成されます。あなたのコードでは、MainPageメンバメソッド(静的ではない)内のappSettings変数にのみアクセスしているので、メンバ変数としても保持しておく方が良いし、オブジェクトがスコープから外れるときに破棄される。 – ShahidAzim

+0

あなたはそうですが、IsolatedStorageSettings.ApplicationSettingsはすでに静的なので、静的でない参照を使用して保存するのは8バイトで、b)MainPageはおそらくアプリケーションと同じライフサイクルを持つため、実際には0バイト。 –

関連する問題