2012-05-03 69 views
0

我想爲我的Windows Phone 7應用程序創建一個設置頁面,我使用本文爲基礎http://msdn.microsoft.com/en-us/library/ff769510(v=vs.92).aspx所以我的應用程序類是:有什麼辦法可以知道IsolatedStorageSettings.ApplicationSettings中的變量何時更改?

public class AppSettings 
{ 

    // Our isolated storage settings 
    IsolatedStorageSettings isolatedStore; 

    // The isolated storage key names of our settings 
    const string CheckBoxSettingKeyName = "CheckBoxSetting"; 
    const string ListBoxSettingKeyName = "ListBoxSetting"; 
    const string RadioButton1SettingKeyName = "RadioButton1Setting"; 
    const string RadioButton2SettingKeyName = "RadioButton2Setting"; 
    const string RadioButton3SettingKeyName = "RadioButton3Setting"; 
    const string UsernameSettingKeyName = "UsernameSetting"; 
    const string PasswordSettingKeyName = "PasswordSetting"; 

    // The default value of our settings 
    const bool CheckBoxSettingDefault = true; 
    const int ListBoxSettingDefault = 0; 
    const bool RadioButton1SettingDefault = true; 
    const bool RadioButton2SettingDefault = false; 
    const bool RadioButton3SettingDefault = false; 
    const string UsernameSettingDefault = ""; 
    const string PasswordSettingDefault = ""; 

    /// <summary> 
    /// Constructor that gets the application settings. 
    /// </summary> 
    public AppSettings() 
    { 
     try 
     { 
      // Get the settings for this application. 
      isolatedStore = IsolatedStorageSettings.ApplicationSettings; 

     } 
     catch (Exception e) 
     { 
      Debug.WriteLine("Exception while using IsolatedStorageSettings: " + e.ToString()); 
     } 
    } 

    /// <summary> 
    /// Update a setting value for our application. If the setting does not 
    /// exist, then add the setting. 
    /// </summary> 
    /// <param name="Key"></param> 
    /// <param name="value"></param> 
    /// <returns></returns> 
    public bool AddOrUpdateValue(string Key, Object value) 
    { 
     bool valueChanged = false; 

     // If the key exists 
     if (isolatedStore.Contains(Key)) 
     { 
      // If the value has changed 
      if (isolatedStore[Key] != value) 
      { 
       // Store the new value 
       isolatedStore[Key] = value; 
       valueChanged = true; 
      } 
     } 
     // Otherwise create the key. 
     else 
     { 
      isolatedStore.Add(Key, value); 
      valueChanged = true; 
     } 

     return valueChanged; 
    } 


    /// <summary> 
    /// Get the current value of the setting, or if it is not found, set the 
    /// setting to the default setting. 
    /// </summary> 
    /// <typeparam name="valueType"></typeparam> 
    /// <param name="Key"></param> 
    /// <param name="defaultValue"></param> 
    /// <returns></returns> 
    public valueType GetValueOrDefault<valueType>(string Key, valueType defaultValue) 
    { 
     valueType value; 

     // If the key exists, retrieve the value. 
     if (isolatedStore.Contains(Key)) 
     { 
      value = (valueType)isolatedStore[Key]; 
     } 
     // Otherwise, use the default value. 
     else 
     { 
      value = defaultValue; 
     } 

     return value; 
    } 


    /// <summary> 
    /// Save the settings. 
    /// </summary> 
    public void Save() 
    { 
     isolatedStore.Save(); 
    } 


    /// <summary> 
    /// Property to get and set a CheckBox Setting Key. 
    /// </summary> 
    public bool CheckBoxSetting 
    { 
     get 
     { 
      return GetValueOrDefault<bool>(CheckBoxSettingKeyName, CheckBoxSettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(CheckBoxSettingKeyName, value); 
      Save(); 
     } 
    } 


    /// <summary> 
    /// Property to get and set a ListBox Setting Key. 
    /// </summary> 
    public int ListBoxSetting 
    { 
     get 
     { 
      return GetValueOrDefault<int>(ListBoxSettingKeyName, ListBoxSettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(ListBoxSettingKeyName, value); 
      Save(); 
     } 
    } 


    /// <summary> 
    /// Property to get and set a RadioButton Setting Key. 
    /// </summary> 
    public bool RadioButton1Setting 
    { 
     get 
     { 
      return GetValueOrDefault<bool>(RadioButton1SettingKeyName, RadioButton1SettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(RadioButton1SettingKeyName, value); 
      Save(); 
     } 
    } 


    /// <summary> 
    /// Property to get and set a RadioButton Setting Key. 
    /// </summary> 
    public bool RadioButton2Setting 
    { 
     get 
     { 
      return GetValueOrDefault<bool>(RadioButton2SettingKeyName, RadioButton2SettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(RadioButton2SettingKeyName, value); 
      Save(); 
     } 
    } 

    /// <summary> 
    /// Property to get and set a RadioButton Setting Key. 
    /// </summary> 
    public bool RadioButton3Setting 
    { 
     get 
     { 
      return GetValueOrDefault<bool>(RadioButton3SettingKeyName, RadioButton3SettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(RadioButton3SettingKeyName, value); 
      Save(); 
     } 
    } 

    /// <summary> 
    /// Property to get and set a Username Setting Key. 
    /// </summary> 
    public string UsernameSetting 
    { 
     get 
     { 
      return GetValueOrDefault<string>(UsernameSettingKeyName, UsernameSettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(UsernameSettingKeyName, value); 
      Save(); 
     } 
    } 

    /// <summary> 
    /// Property to get and set a Password Setting Key. 
    /// </summary> 
    public string PasswordSetting 
    { 
     get 
     { 
      return GetValueOrDefault<string>(PasswordSettingKeyName, PasswordSettingDefault); 
     } 
     set 
     { 
      AddOrUpdateValue(PasswordSettingKeyName, value); 
      Save(); 
     } 
    } 


} 

一切正常,我能更新從XAML設置頁面設​​置值,我可以使用

IsolatedStorageSettings Settings; 
Settings = IsolatedStorageSettings.ApplicationSettings; 
string checkboxvalue = (string)Settings["CheckBoxSetting"]; 

現在我想做的事,我的主要應用程序訪問的設置值是能夠知道當應用程序中設置的值改變/更新,從而使當設置更新時,我可以執行操作。

+0

本質上,問題是:**有什麼辦法可以知道IsolatedStorageSettings.ApplicationSettings中的變量何時發生變化?** – rajat

回答

-1

有很多方法可以讓您可以做到這一點,但最簡單的方法就是在您需要知道它們時查詢設置。

另一個簡單備選方法是爲您的AppSettings對象在事情發生變化時引發事件並讓相關其他類訂閱它們。

1

與其他答案類似,但更簡潔。如果您已經使用性質的工作,實現INotifyPropertyChanged的接口,編寫自己的RaisePropertyChanged/NotifyPropertyChanged和目標類訂閱的PropertyChanged事件。

IsolatedStorageSettings.ApplicationSettings是一個詞典。這是默認情況下不可觀察的。

相關問題