我面临以下问题:对于 WPF 中的复选框,我需要知道何时尝试更改复选框的状态,即:
- 如果用户单击了复选框 - 触发事件,
- 如果复选框 IsChecked 属性被赋予一个新值 - 触发一个事件,
- 如果复选框 IsChecked 属性被赋予与它已经拥有的相同的值 - 触发一个事件。
这种结构将用于控制嵌入式设备的软件。无法请求该设备的状态,只能告诉该设备进入某个状态。如果设备处于某种状态,再告诉它进入这个状态并没有什么坏处。因此,我的请求。
到目前为止,我已经提出了以下解决方案:编写一个派生自 CheckBox 的新类,但通过以下方式重新定义 IsChecked 属性:
public class ExtendedCheckBox : CheckBox
{
public class IsCheckedAssignedEventArgs : RoutedEventArgs
{
public bool? prevState { get; set; }
public bool? newState { get; set; }
public IsCheckedAssignedEventArgs(bool? prevState, bool? newState)
{
this.prevState = prevState;
this.newState = newState;
}
}
public event EventHandler IsCheckedAssigned = delegate { };
public new bool? IsChecked
{
get
{
return base.IsChecked;
}
set
{
this.IsCheckedAssigned(this, new IsCheckedAssignedEventArgs(this.IsChecked, value));
base.IsChecked = value;
}
}
}
只有以编程方式分配 IsChecked 属性时,它才能正常工作。单击 CheckBox 时,不会触发该事件。
第一个问题是 - 这是解决我的问题的正确方法吗?如果是,如何使它适用于我需要的所有情况?如果不是,有什么更好的方法?
提前感谢您的任何想法。