WPF复选框:检查改变处理

问题描述 投票:38回答:5

在WPF数据绑定,我可以器isChecked属性绑定到一些数据,例如用户设置,但我需要处理“CheckChanged”事件,我知道我可以seperately手柄选中,未选中的事件,但有什么办法,当该值更改为得到通知?

<CheckBox Content="Case Sensitive" IsChecked="{Binding bSearchCaseSensitive,
          Source={x:Static Properties:Settings.Default}}" />

注意:如果选中或取消选中我不在乎。我只是想,当它改变时被通知。

c# wpf checkbox
5个回答
85
投票

那你可以处理选中和未选中的事件seperately并不意味着你必须。如果你不想遵循MVVM模式,你可以简单地附上相同的处理这两个事件,你有你的改变的信号:

<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>

在代码隐藏;

private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
  MessageBox.Show("Eureka, it changed!");
}

请注意,WPF大力鼓励利用INotifyPropertyChanged的和/或DependencyProperties的一个原因MVVM模式。这是一些作品,不是我想鼓励良好的编程习惯。


13
投票

林把这个在回答中,因为它是一个评论太长:

如果你需要的虚拟机是知道什么时候CheckBox改变时,你真的应该绑定CheckBox到虚拟机,而不是一个静态值:

public class ViewModel
{
    private bool _caseSensitive;
    public bool CaseSensitive
    {
        get { return _caseSensitive; }
        set
        {
            _caseSensitive = value;
            NotifyPropertyChange(() => CaseSensitive);

            Settings.Default.bSearchCaseSensitive = value;
        }
    }
}

XAML:

<CheckBox Content="Case Sensitive" IsChecked="{Binding CaseSensitive}"/>

11
投票

作为一个复选框,点击=复选框更改以下也将工作:

<CheckBox Click="CheckBox_Click" />
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    // ... do some stuff
}

它具有当IsThreeState="True"工作,而只是处理经过和未选中没有额外的优势。


7
投票

我知道这是一个老问题,但如何只绑定如果使用MVVM到Command

例如:

<CheckBox Content="Case Sensitive" Command="{Binding bSearchCaseSensitive}"/>

对我来说,它触发两个CheckUncheck


0
投票

怎么样Checked事件?再加上AttachedCommandBehaviors或类似的东西,和DelegateCommand让您的视图模型每次该事件被称为发射的功能。


0
投票

我发现处理经过使用MVVM模式/未检查的事件简单且适当的方法如下,与Caliburn.Micro:

 <CheckBox IsChecked="{Binding IsCheckedBooleanProperty}" Content="{DynamicResource DisplayContent}" cal:Message.Attach="[Event Checked] = [Action CheckBoxClicked()]; [Event Unchecked] = [Action CheckBoxClicked()]" />

和实施方法CheckBoxClicked()在视图模型,做你想做的东西。

© www.soinside.com 2019 - 2024. All rights reserved.