1

我正在尝试创建和隔离存储设置,用户可以根据用户设置页面中切换开关的状态打开或关闭声音或振动警报(或两者)。我正在使用 mvvm 框架,需要在 MainViewModel 类中引用 Setting 类。我意识到我需要插入一个 if 语句作为该过程的一部分,但遇到了困难。

设置.xaml

<!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <toolbox:ToggleSwitch Name="MobileSound" Header="Sound"></toolbox:ToggleSwitch>
        <toolbox:ToggleSwitch Name="MobileVibrate" Header="Vibrate" Margin="6,119,6,371"></toolbox:ToggleSwitch>

        <Slider Height="84" HorizontalAlignment="Left" Margin="12,310,0,0" Name="slider1" VerticalAlignment="Top" Width="418" Value="1" Minimum="1" />
        <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,274,0,0" Name="Difficulty" Text="Refresh Timer" VerticalAlignment="Top" Width="135" />
    </Grid>

设置.cs

using System;
using System.Collections.Generic;
using Microsoft.Phone.Controls;
using System.IO.IsolatedStorage;
using System.Windows.Navigation;

namespace MobileApplicationSample
{
/// <summary>
/// Description for Setting.
/// </summary>
public partial class Setting : PhoneApplicationPage
{
    // Constructor
    public Setting()
    {
        InitializeComponent();
        settings = IsolatedStorageSettings.ApplicationSettings;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("into the app");
        try
        {
            System.Diagnostics.Debug.WriteLine("Retrieving values");
            MobileSound.IsChecked = (bool)settings["sound"];
            MobileVibrate.IsChecked = (bool)settings["vibrate"];
            slider1.Value = (Int16)settings["diff"];

        }
        catch (KeyNotFoundException)
        {
            System.Diagnostics.Debug.WriteLine("First Time using the app");             
            settings.Add("sound", false);
            settings.Add("vibrate", false);
            settings.Add("diff", 1);
            settings.Save();
        }

    }
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Exiting, so save now");
        settings["vibrate"] = MobileVibrate.IsChecked;
        settings["sound"] = MobileSound.IsChecked;
        settings["diff"] = (Int16)slider1.Value;
        settings.Save();
    }

    public IsolatedStorageSettings settings { get; set; }
}

}

4

1 回答 1

0

首先定义一个拨动开关...我正在使用一个拨动开关,您可以根据 2 进行更改。

<toolkit:ToggleSwitch  Foreground="Black" Background="Black" FontWeight="Medium" IsChecked="{Binding LocationSetting, Mode=TwoWay, Source={StaticResource appSettings}}" Margin="0,15,0,0" />

然后在您的设置类中。

  public class AppSettings : ViewModelBase
  {
    IsolatedStorageSettings settings;

    const string LocationSettingName = "sound";
    const bool LocationSettingDefault = false;

    public AppSettings()
            {
                // Get the settings for this application.
                settings = IsolatedStorageSettings.ApplicationSettings;
            }

            public bool AddOrUpdateValue(string Key, Object value)
            {
                bool valueChanged = false;

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

            public T GetValueOrDefault<T>(string Key, T defaultValue)
            {
                T value;

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

            public void Save()
            {
                settings.Save();
            }

            public bool LocationSetting
            {
                get
                {
                    return GetValueOrDefault<bool>(LocationSettingName, LocationSettingDefault);
                }
                set
                {
                    if (AddOrUpdateValue(LocationSettingName, value))
                    {
                        Save();
                    }
                }
            }
      }
于 2013-07-10T11:29:18.820 回答