В C # я могу изменить IValueConverter для 2 значений и NULL? - PullRequest
0 голосов
/ 22 марта 2012

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

1 Ответ

0 голосов
/ 22 марта 2012

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

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

Если false слишком конкретный, вы можете указать значение параметра "по умолчанию", которое будет возвращено вместо.

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

ConvertBack может быть проблемой, так как вы объединяете "мужской" и "неизвестный" в "не проверено". Пока это не слишком усердно в вызове этого и сохранении состояния обратно в IsMale, с вами все будет в порядке.

...