保存ToggleButton状态

时间:2018-04-22 10:35:44

标签: c# wpf

我对MVVM并不熟悉所以我不知道应该从哪里开始如果解决方案在那里但我到目前为止所做的是以下(使用代码):

我基本上有一个切换按钮,如果你检查它,它会在注册表中写一些东西,如果你取消选中它,它将从注册表中删除相同的东西。我只是添加了Checked和Unchecked事件。

这里的问题是我想保存ToggleButton的状态(是否已选中或未选中)。我能够通过比较注册表然后将isChecked转为true或false来在表单加载上执行此操作但问题是如果我将isChecked转为true,它将触发'Checked'事件并且基本上在注册表上写相同的东西试。

 private void MyWindow_Loaded(object sender, RoutedEventArgs e)
    {

        RegistryKey rk = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        if (rk.GetValue("Z") == null)
        {
            Toggle.IsChecked = false;

        }
        else
        {
            Toggle.IsChecked = true;
        }

    }
    private void Toggle_Checked(object sender, RoutedEventArgs e)
    {

        RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);


        rkRegistryKey.SetValue("Z", System.Reflection.Assembly.GetExecutingAssembly().Location);



    }
    private void Toggle_UnChecked(object sender, RoutedEventArgs e)
    {

        RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        rkRegistryKey.DeleteValue("Z", false);


    }

1 个答案:

答案 0 :(得分:1)

您可以使用布尔变量暂时"暂停"事件处理程序:

private bool _handleEvents;
private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
    RegistryKey rk = Registry.CurrentUser.OpenSubKey
        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

    _handleEvents = false;
    if (rk.GetValue("Z") == null)
    {
        Toggle.IsChecked = false;
    }
    else
    {
        Toggle.IsChecked = true;
    }
    _handleEvents = true;

}
private void Toggle_Checked(object sender, RoutedEventArgs e)
{
    if (!_handleEvents)
        return;

    RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);


    rkRegistryKey.SetValue("Z", System.Reflection.Assembly.GetExecutingAssembly().Location);
}

private void Toggle_UnChecked(object sender, RoutedEventArgs e)
{
    if (!_handleEvents)
        return;

    RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey
        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

    rkRegistryKey.DeleteValue("Z", false);
}