2012-03-22 1 views
0

В настоящее время у меня есть 2 переключателя на моей форме для мужчин и женщин. Они привязаны к моей базе данных, где IsMale является либо 1 для мужчин, либо 0 для женщин.В C# я могу изменить IValueConverter на 2 значения и NULL?

Затем я использую 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, не выбрана ни одна радиокнопка ???? Если не лучший способ добиться того, что мне нужно?

ответ

0

Я думаю, что это Convert функция вы хотите, чтобы положить в NegativeBooleanConverter: (также аналогичная ConvertBack функция)

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

Если false это слишком специфичны, вы могли бы иметь параметр быть «по умолчанию» значение, которое будет возвращено вместо этого.

Если ошибка IsChecked на кнопке Male является проблемой, вы можете сделать другой конвертер, который будет return ((bool?)value).GetValueOrDefault();.

ConvertBack может быть проблемой, поскольку вы по существу объединяете «мужчин» и «неизвестных» в «не проверенные». До тех пор, пока это не слишком переусердствует в том, чтобы вызвать это и сохранить состояние обратно до IsMale, вы должны быть в порядке.