繁体   English   中英

在C#中,我可以将IValueConverter更改为2个值和一个NULL吗?

[英]In C# can I change a IValueConverter for 2 values and a NULL?

目前,我在表单上有2个用于“男性”和“女性”的单选按钮。 这些绑定到我的数据库中,IsMale是男性的1或女性的0。

然后,我使用NegativeBooleanConverter在两者之间切换。 我的xaml看起来像这样:

 <RadioButton Content="Male" Name="rbMale" IsChecked="{Binding Person.IsMale, Mode=TwoWay}" />
 <RadioButton Content="Female" Name="rbFelmale" IsChecked="{Binding Person.IsMale, Converter={StaticResource NegativeBooleanConverter}}" />

我的NegativeBooleanConverter如下所示:

 public class NegativeBooleanConverter : IValueConverter
{
    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        return !(bool)value;
    }

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        return !(bool)value;
    }
}

这一切都很好,没有问题!!

我现在将更多数据上载到IsMale为NULL的数据库中,因为目前尚不知道。

我的问题是是否可以更改转换器,以便如果该值为NULL都没有选择单选按钮? 如果不是,实现我追求的最好方法是什么?

我认为这是您要放入NegativeBooleanConverterConvert函数:(也是类似的ConvertBack函数)

var b = value as bool?;
if (b.HasValue)
    return !b.Value;
else
    return false;

如果false太具体,则可以将参数设为“默认”值,而不是返回该值。

如果Male按钮上的IsChecked为null引起问题,则可以使另一个转换器return ((bool?)value).GetValueOrDefault();

ConvertBack可能是一个问题,因为您实际上是将“男性”和“未知”合并为“未检查”。 只要调用它并将状态保存回IsMale并不太过分,您就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM