2010-12-29 5 views
6

Tôi đang cố gắng thực hiện một thử nghiệm đơn giản với Bộ nhớ riêng để tôi có thể sử dụng nó cho ứng dụng Windows Phone 7 mà tôi đang thực hiện.Vấn đề lưu trữ riêng biệt đơn giản

Bài kiểm tra Tôi tạo bộ tạo khóa và giá trị bằng một nút và với nút khác đặt giá trị đó bằng văn bản củ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"]; 
     } 
    }  
} 
} 

Bằng cách này mang lại cho tôi lỗi này:

Không thể truy cập vào một thành viên không tĩnh của loại ngoài 'IsoStore.MainPage' qua kiểu lồng nhau 'IsoStore.MainPage.AppSettings'

Vì vậy, tôi đã cố gắng này:

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

Và thay vào đó tôi nhận được lỗi này:

tên 'ứng dụng ettings 'không tồn tại trong ngữ cảnh hiện tại

Vì vậy, tôi thấy vấn đề gì rõ ràng ở đây?

Cảm ơn bạn rất nhiều vì đã dành thời gian.

Trả lời

4

appSettings là ra khỏi phạm vi cho button2_Click

Cập nhật Kể từ IsolatedStorageSettings.ApplicationSettings là tĩnh nào không có nhu cầu sử dụng tài liệu tham khảo ở tất cả. Chỉ cần truy cập trực tiếp nó.

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

Vì vậy, tôi thậm chí không cần tạo phiên bản "appSettings" của IsolatedStorage? Sẽ có một lợi ích nếu tôi đã làm? – Dan

+0

@Dan không thực sự. Bạn có thể làm cho một đối số cho dễ đọc, nhưng đó là khá mỏng. –

+0

Vâng, cảm ơn bạn rất nhiều lần nữa vì sự giúp đỡ của bạn. – Dan

0

Hãy thử mã này, vì không cần phải xác định lớp 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

Điều này cũng hoạt động hoàn hảo. Tại sao nó của bạn không yêu cầu định nghĩa tĩnh? – Dan

+0

Thời gian sống của phạm vi tĩnh là ở cấp lớp, do đó khi MainPage sẽ được nạp bởi CLR, tham chiếu tĩnh của appSettings cũng sẽ được tạo. Trong khi trong mã của bạn, bạn chỉ đang truy cập biến appSettings trong các phương thức thành viên MainPage (không tĩnh), do đó tốt hơn nên giữ nó như một biến thành viên, và nó sẽ bị phá hủy khi đối tượng sẽ thoát khỏi phạm vi. – ShahidAzim

+0

bạn phải nhưng a) kể từ khi IsolatedStorageSettings.ApplicationSettings đã được tĩnh tất cả bạn đang tiết kiệm bằng cách sử dụng một tham chiếu không tĩnh là một toàn bộ 8 Bytes và b) kể từ MainPage có thể có chu kỳ sống giống như ứng dụng của nó có thể thực sự là một khoản tiết kiệm của 0 byte. –