2012-03-22 7 views
0

現在、男性用と女性用の2つのラジオボタンがあります。これらは私のデータベースにバインドされています。ここでIsMaleは男性の場合は1、女性の場合は0です。C#では、IValueConverterを2つの値とNULLに変更できますか?

次に、NegativeBooleanConverterを使用して2つの間で切り替えることができます。私の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の場合でもラジオボタンが選択されないようにコンバータを変更することです。もし私が何を達成するための最良の方法は何ですか?

答えて

0

私は、これはあなたがNegativeBooleanConverterに入れるために探しているConvert機能だと思う:falseがあまりにも特定の場合は、パラメータが「デフォルト」で持つことができる(また、同様のConvertBack機能)

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

値が返されます。

MaleボタンのIsCheckedがnullの場合、別のコンバータをreturn ((bool?)value).GetValueOrDefault();にすることができます。

ConvertBack "male"と "unknown"を本質的に "チェックなし"に統合しているため、問題が発生する可能性があります。それを呼び出すことにあまりにも熱心ではない限り、状態をIsMaleに戻しておくと、あなたは大丈夫です。

関連する問題