保存ToggleButton状态

我对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);



    }


蝴蝶不菲
浏览 169回答 1
1回答

慕婉清6462132

您可以使用布尔变量临时“暂停”事件处理程序: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);}
打开App,查看更多内容
随时随地看视频慕课网APP