2010-12-29 4 views
6

격리 된 저장소로 간단한 테스트를 수행하려고하는데, 내가 만들고있는 Windows Phone 7 응용 프로그램에 사용할 수 있습니다.간단한 격리 된 저장소 문제

집합을 만드는 테스트에서는 하나의 버튼으로 키와 값을 만들고 다른 버튼으로는 해당 값을 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.AppSettings'

그래서 나는 시도 외부 유형의 비 정적 멤버 중첩 된 형태를 통해 'IsoStore.MainPage'을 액세스 할 수 없습니다 이 :

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

대신 내가이 오류를 얻을 :

이름 '응용 프로그램을 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

@ Dan 아니, 정말로. 당신은 가독성을 주장 할 수는 있지만 꽤 가늘다. –

+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 바이트. –

관련 문제