考虑到WPF控件,我如何知道复选框的值是否已更改(切换)?
我知道常见的Checked
,Unchecked
,Clicked
事件,但是当值发生变化时,无论其如何更改,事件如何?
我仔细查看了这些事件,但我找不到任何东西,但也许我错过了显而易见的事情(过去曾多次发生过这种情况)。
答案 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(...);