使复选框绑定为可空布尔过渡从null到真
问题描述:
我有一个复选框,它的IsChecked
属性绑定到一个可为空的布尔值。当我的控件第一次加载时,该值为空,复选框显示为灰色。这就是我要的。使复选框绑定为可空布尔过渡从null到真
当用户单击复选框时,它将转到false/Unchecked状态。
但是,99%的时间用户要勾选复选框 - 目前意味着双击该复选框。
当用户第一次点击复选框时,如何使值从空移动到真?
答
您可以修改绑定属性的setter以检查前一个值是否为空,如果是,则将该值设置为true
。事情是这样的:
public bool? MyBoolProperty
{
get { return _myBoolProperty; }
set
{
_myBoolProperty = (_myBoolProperty != null || value == null) ? value : true;
RaisePropertyChanged("MyBoolProperty");
}
}
结合系统将重新读取属性它集之后,因此新值将由CheckBox
反映。
答
最简单的方法是简单地处理click
事件,并设置控制true
如果当前状态为null
,可选的第一次点击后您的内部代码的跟踪设定一个flag
。
答
您可以处理Click事件和实施这样的逻辑:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox cb = sender as CheckBox;
switch (cb.IsChecked)
{
case null:
cb.IsChecked = false;
break;
case true:
cb.IsChecked = true;
break;
case false:
if (cb.IsThreeState) {
cb.IsChecked = null;
} else {
cb.IsChecked = true;
}
break;
}
e.Handled = true;
}
答
我有同样的问题,跑进这个问题。这是一个迟到的反应,但我认为这是最好的解决办法:)
随着IsThreeState
和TargetNullValue
帮助下,你可以做到这一点
<CheckBox IsThreeState="False" IsChecked="{Binding YOUR_NULLABLE_PROPERTY, TargetNullValue=false}" />
唯一需要注意的是,它会零和真实之间切换。永远不会有错误的价值。
这将影响试图设置属性的代码,这相当不妥。 – Miral 2012-09-18 01:14:16