如何使用IValueConverter将null转换为布尔值?
我正在使用wpf尝试显示一堆布尔值(在复选框中)。当创建新记录时,这些值为null,并显示为复选框中的“不确定”状态。我希望将null显示并保存为“false”值。
我尝试创建一个NullToBoolean转换器,它从数据库中获取null值并将其显示为false,然后在用户点击保存时将其保存为false。(基本上,我试图避免用户在复选框中点击两次(一次使其为true,再一次使其为false)。这似乎在导入时起作用-即null值显示为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>
我不知道问题是因为我的代码有误,还是Converter认为没有任何改变,因此不需要ConvertBack
。我尝试了所有的Mode
,并且交换了Convert和ConvertBack的代码,但似乎都不起作用。
是否有人可以指出我需要怎么做才能解决这个问题?