Search code examples
c#windows-phone-7xamlwindows-phone-8

How to set List picker in settings page and store and retrieve value from IsolatedStorageSettings?(Descriptions Inside)


I don't get it how did I went wrong in the list picker and saving the value in IsolatedStorageSettings,

I've tried,

Settings.cs

    // Our isolated storage settings
    IsolatedStorageSettings isolatedStore;

    // The isolated storage key names of our settings
    const string ListPickerSettingKeyName = "ListPickerSetting";

    // The default value of our settings
    const int ListPickerSettingDefault = 0;

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

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

    /// <summary>
    /// Property to get and set a ListPicker Setting Key.
    /// </summary>
    public int ListPickerSetting
    {
        get
        {
            return GetValueOrDefault<int>(ListPickerSettingKeyName, ListPickerSettingDefault);
        }
        set
        {
            AddOrUpdateValue(ListPickerSettingKeyName, value);
            Save();
        }
    }

    /// <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();
    }

in My MainPage.xaml,

    <toolkit:ListPicker Name="lstSetting" SelectionMode="Single" Foreground="DarkBlue" SelectedIndex="{Binding Source={StaticResource Settings}, Path=ListPickerSetting, Mode=TwoWay}" >
                        <toolkit:ListPickerItem Content="item1" />
                        <toolkit:ListPickerItem Content="item2" />
                    </toolkit:ListPicker>

the actual problem is it is not displayed the item2 when the selected index is 1,

please somebody tell me how to display the selected item in the selected index. . .


Solution

  • It looks like the Path doesn't match the property name. Shouldn't Path=Setting be Path=ListPickerSetting instead?

    Also, Settings needs to implement INotifyPropertyChanged so that when the property changes, the control will know it needs to get the new value.