将复选框绑定到可以为空的bool从null转换为true

Grh*_*rhm 4 wpf checkbox binding

我有一个复选框,其IsChecked属性绑定到可以为空的bool.当我的控件首次加载时,该值为null,复选框显示为灰色.这就是我要的.

当用户单击该复选框时,它将移至false/Unchecked状态.

但是,99%的用户想要勾选复选框 - 这当前意味着双击复选框.

当用户第一次单击复选框时,如何使值从null移动到true?

Pav*_*kov 6

您可以只修改bound属性的setter来检查前一个值是否为null,如果是,则将值设置为true.像这样的东西:

public bool? MyBoolProperty 
{
   get { return _myBoolProperty; }
   set 
   {
       _myBoolProperty = (_myBoolProperty != null || value == null) ? value : true;
       RaisePropertyChanged("MyBoolProperty");       
   }
}
Run Code Online (Sandbox Code Playgroud)

绑定系统将在设置后重新读取属性,因此新值将反映出来CheckBox.


Ton*_*Nam 6

我有同样的问题并遇到了这个问题.这是一个迟到的回应,但我认为这是最好的解决方案:)

在你的帮助下IsThreeState,TargetNullValue你可以做到这一点

 <CheckBox  IsThreeState="False" IsChecked="{Binding YOUR_NULLABLE_PROPERTY, TargetNullValue=false}" />
Run Code Online (Sandbox Code Playgroud)

唯一需要注意的是,它将在null和true之间切换.永远不会有错误的价值.