4

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

我知道有常见的Checked, Unchecked,Clicked事件,但是当值发生变化时,无论它是如何变化的,事件如何?

我浏览了这些事件,但没有发现任何东西,但也许我错过了显而易见的事情(因为过去发生过很多次)。

4

4 回答 4

7

您可以将IsChecked依赖属性绑定到布尔值。在那个绑定的属性设置器上,你可以操纵你想要的(独立地,如果它把它设置为真或假)。这正如预期的那样工作。

在你看来:

  <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; 
      }
  }
于 2012-09-13T18:53:56.470 回答
6

我知道这已经有一个公认的答案,但是绑定在这方面有点过分了。

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

于 2013-05-23T04:56:52.620 回答
1

离开兰道夫的答案,只需创建一个代表您的窗口的类。在新类中,创建一个名为 BlahIsChecked 的属性。在类和新属性的设置器中实现 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 类并说 this.DataContext = new MainModel(); 您可以在 WPF 或 c# 中执行此操作。

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

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

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

于 2012-09-13T19:12:24.460 回答
1

您最好的选择可能是IsChecked物业。但是,如果您需要一个事件,您可以查看创建一个并使用该方法DependencyPropertyDescriptor注册一个处理程序。AddValueChanged

我认为这与您收到有关复选框值已更改的事件通知一样接近。创建描述符并添加处理程序如下所示:

var dpd = DependencyPropertyDescriptor.FromProperty(CheckBox.IsChecked, typeof(CheckBox));
dpd.AddValueChanged(...);
于 2012-09-13T19:22:53.400 回答