如何使用 IValueConverter 将空值转换为 bool 值?
我正在使用 wpf 来尝试显示一堆 bool 值(在复选框中)。创建新记录时,这些值为空,并在复选框中显示为“不确定”。我希望空值出现并保存为“假”值。
我尝试创建一个 NullToBoolean 转换器,它从数据库中获取空值并将它们显示为 false,然后在用户点击保存时将它们保存为 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;
}
}
我试图让 Converter 使用的复选框之一:
<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 with ConvertBack 中切换了代码,但似乎没有任何效果。
有人可以指出我需要做什么来解决这个问题吗?
最佳答案
嗯,如果开箱即用,为什么要使用转换器?
<CheckBox IsChecked="{Binding VarianceDescriptionProvided, TargetNullValue=False}" />
更多信息请查看here .
关于c# - Null To Boolean IValueConverter 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15357234/