是否有WPF复选框控制切换事件?

时间:2012-09-13 18:51:02

标签: c# wpf checkbox toggle

考虑到WPF控件,我如何知道复选框的值是否已更改(切换)?

我知道常见的CheckedUncheckedClicked事件,但是当值发生变化时,无论其如何更改,事件如何?

我仔细查看了这些事件,但我找不到任何东西,但也许我错过了显而易见的事情(过去曾多次发生过这种情况)。

4 个答案:

答案 0 :(得分:6)

您可以将IsChecked依赖属性绑定到布尔值。在该绑定属性设置器上,您可以操作您想要的内容(如果将其设置为true或false,则可以单独操作)。这与预期一样有效。

在你看来:

  <Grid>
    <CheckBox ... IsChecked="{Binding ShowPending}"/>
  </Grid>

在您的DataContext ViewModel或CodeBehind。

  private bool showPending = false;

  public bool ShowPending
  {
      get { return this.showPending; }
      set 
      { 
         //Here you mimic your Toggled event calling what you want!
         this.showPending = value; 
      }
  }

答案 1 :(得分:5)

我知道这已经有了接受的答案,但绑定对此有点过分。

只需编写一个事件处理程序并将其连接到Checked和Unchecked事件,然后检查事件处理程序中的IsChecked属性。

答案 2 :(得分:1)

关闭Randolf的答案,只需创建一个代表你窗口的类。 在新类中,创建一个名为BlahIsChecked的属性。在类和新属性的setter中实现INotifyPropertChangedEvent,使用属性名称激活事件。

class Blah : INotifyPropertyChanged
{
    // Used for triggering the event
    public event PropertyChangedEventHandler PropertyChanged;

    // Called when the property changes
    protected void OnPropertyChanged(String propertyName)
    {
        // Retrieve handler
        PropertyChangedEventHandler handler = this.PropertyChanged;
        // Check to make sure handler is not null
        if(handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private bool _blahIsChecked;
    public bool BlahIsChecked
    {
        get {
            return _blahIsChecked;
        }
        set {
            _blahIsChecked = value;
            OnPropertyChanged("BlahIsChecked);
        }
    }
}

现在,转到你的wpf类并说出.DataContext = new MainModel();您可以在WPF或c#中执行此操作。

现在在您的复选框xaml中执行以下操作

<checkbox Checked="{Binding BlahIsChecked, Mode=TwoWay}"/>

我是从记忆中做到的,但应该让你开始。祝你好运。

答案 3 :(得分:1)

您最好的选择可能是IsChecked属性。但是,如果您需要某个活动,则可以查看创建DependencyPropertyDescriptor并使用AddValueChanged方法注册处理程序。

我认为这与您点击复选框的值已更改的即时通知非常接近。创建描述符并添加处理程序如下所示:

var dpd = DependencyPropertyDescriptor.FromProperty(CheckBox.IsChecked, typeof(CheckBox));
dpd.AddValueChanged(...);