考虑到 WPF 控件,我如何知道复选框的值是否已更改(切换)?
我知道有常见的Checked
, Unchecked
,Clicked
事件,但是当值发生变化时,无论它是如何变化的,事件如何?
我浏览了这些事件,但没有发现任何东西,但也许我错过了显而易见的事情(因为过去发生过很多次)。
您可以将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;
}
}
我知道这已经有一个公认的答案,但是绑定在这方面有点过分了。
只需编写一个事件处理程序并将其连接到 Checked 和 Unchecked 事件,然后检查事件处理程序内的 IsChecked 属性。
离开兰道夫的答案,只需创建一个代表您的窗口的类。在新类中,创建一个名为 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}"/>
我是凭记忆做到的,但应该让你开始。祝你好运。
您最好的选择可能是IsChecked
物业。但是,如果您需要一个事件,您可以查看创建一个并使用该方法DependencyPropertyDescriptor
注册一个处理程序。AddValueChanged
我认为这与您收到有关复选框值已更改的事件通知一样接近。创建描述符并添加处理程序如下所示:
var dpd = DependencyPropertyDescriptor.FromProperty(CheckBox.IsChecked, typeof(CheckBox));
dpd.AddValueChanged(...);