Привязка данных элемента WPF для IsEnabled (но для лжи)

Я - начинающий в WPF, и существует что-то, что я, может казаться, не выясняю.

У меня есть a CheckBox то, что я хотел бы отключить когда a RadioButton не выбран. Мой текущий синтаксис:

<CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox>

Так в основном я хочу, чтобы IsEnabled принял противоположное значение, чем выражение привязки, которое я в настоящее время предоставляю.

Как я могу сделать это?Спасибо.

5
задан Anatoliy Nikolaev 5 August 2013 в 04:59
поделиться

2 ответа

Вам нужно использовать так называемый преобразователь значений (класс, реализующий IValueConverter). Ниже показан очень простой пример такого класса. (Следите за обрезкой ...)

public class NegateConverter : IValueConverter
{

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

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

}

Затем, чтобы включить его в свой XAML, вы должны сделать что-то вроде:

<UserControl xmlns:local="clr-namespace:MyNamespace">
    <UserControl.Resources>
        <local:NegateConverter x:Key="negate" />
    </UserControl.Resources>

    ...
    <CheckBox IsEnabled="{Binding IsChecked, ElementName=rbBoth, Converter={StaticResource negate}}"
              Content="Show all" />

</UserControl>
20
ответ дан 18 December 2019 в 07:08
поделиться

Текущий синтаксис уже соответствует вашим потребностям. Это отключит флажок, если переключатель не отмечен.

Если вы действительно хотите инвертировать сценарий, все, что вам нужно, это конвертер. Взгляните на этот образец .

1
ответ дан 18 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: