Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否存在WPF复选框控件切换事件?_C#_Wpf_Checkbox_Toggle - Fatal编程技术网

C# 是否存在WPF复选框控件切换事件?

C# 是否存在WPF复选框控件切换事件?,c#,wpf,checkbox,toggle,C#,Wpf,Checkbox,Toggle,考虑到WPF控件,如何知道复选框的值是否已更改(切换) 我知道有一些常见的已选中,未选中,单击事件,但是当值发生变化时,不管它是如何变化的,事件又如何呢 我查看了这些事件,但没有发现任何东西,但可能我遗漏了明显的内容(就像过去多次发生的那样)。您可以将IsChecked依赖性属性绑定到布尔值。在绑定属性设置器上,您可以操作所需的内容(如果将其设置为true或false,则可以独立操作)。这和预期的一样 在你看来: <Grid> <CheckBox ... IsChe

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

我知道有一些常见的
已选中
未选中
单击
事件,但是当值发生变化时,不管它是如何变化的,事件又如何呢


我查看了这些事件,但没有发现任何东西,但可能我遗漏了明显的内容(就像过去多次发生的那样)。

您可以将
IsChecked
依赖性属性绑定到布尔值。在绑定属性设置器上,您可以操作所需的内容(如果将其设置为true或false,则可以独立操作)。这和预期的一样

在你看来:

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

根据Randolf的答案,只需创建一个表示窗口的类。 在新类中,创建一个名为BlahIsChecked的属性。在类中实现INotifyPropertChangedEvent,并在新属性的setter中激发具有属性名称的事件

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=newmainmodel();您可以在WPF或c#中执行此操作

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

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


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

你最好的选择可能是
IsChecked
属性。但是如果您需要一个事件,您可以考虑创建一个事件并用该方法注册一个处理程序

我认为这差不多是您将得到的一个事件通知,即复选框的值已更改。创建描述符并添加处理程序如下所示:

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

我知道这已经有了一个公认的答案,但是绑定在这个问题上有点过头了


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

我从未使用过绑定,现在尝试您的建议时,我有点困惑。你能给我举个简单的例子吗?如果我很痛苦,很抱歉,但这可以完全用C完成吗?我希望尽可能远离XAML编辑。@IneedHelp,因为您可以看到一切都是在C#中完成的。视图部分可以替换为普通的C#(声明复选框并在IsChecked上设置绑定)。@RandolfR-F当从代码隐藏或WPF更改时,您的答案是否切换IsChecked属性?我认为如果没有INotifyPropertyChanged继承,当源代码发生变化时,从源代码到目标代码只能是单向的?我认为tylergarland将处理来自和notify的更改。事实上,我认为数据绑定比一个新的事件处理程序更简单。此外,您可以在没有对象的情况下选中或取消选中复选框。它们都是可接受的解决方案。我更喜欢我的绑定,因为在将控件附加到实际数据对象时,我不希望在控件上使用多个绑定。还有一些维护需要考虑,我觉得如果事件是在实际的事件处理程序上处理的,而不是隐藏在绑定中,那么在哪里处理事件就更清楚了。
var dpd = DependencyPropertyDescriptor.FromProperty(CheckBox.IsChecked, typeof(CheckBox));
dpd.AddValueChanged(...);