如何使用 IValueConverter 将空值转换为布尔值?
我正在使用 wpf 尝试显示一堆布尔值(在复选框中)。创建新记录时,这些值为空,并在复选框中显示为“不确定”。我希望空值出现并保存为“假”值。
我尝试创建一个 NullToBoolean 转换器,它从数据库中获取 null 值并将其显示为 false,and then当用户点击保存时将它们保存为 false。 (本质上,我试图避免用户必须在复选框中单击两次(一次使其为真,然后再次使其为假)。这似乎适用于导入 - 即空值显示为假 - 但除非我执行两次单击舞蹈,保存时数据库中的值不会更改。
我的转换器:
[ValueConversion(typeof(bool), typeof(bool))]
public class NullBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
return value;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
return value;
}
return null;
}
}
我试图让转换器使用的复选框之一:
<CheckBox Grid.Column="1" Grid.Row="0" Padding="5" Margin="5" VerticalAlignment="Center" Name="chkVarianceDescriptionProvided" IsThreeState="False">
<CheckBox.IsChecked>
<Binding Path="VarianceDescriptionProvided" Mode="TwoWay">
<Binding.Converter>
<utils:NullBooleanConverter />
</Binding.Converter>
</Binding>
</CheckBox.IsChecked>
</CheckBox>
我不知道问题是否是因为我的代码错误,或者是否是转换器认为没有任何改变,因此不需要ConvertBack
。我已经尝试了所有Mode
s 并用 ConvertBack 切换了 Convert 中的代码,但似乎没有任何效果。
有人可以指出我需要做什么来解决这个问题吗?