Я - начинающий в WPF, и существует что-то, что я, может казаться, не выясняю.
У меня есть a CheckBox
то, что я хотел бы отключить когда a RadioButton
не выбран. Мой текущий синтаксис:
<CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox>
Так в основном я хочу, чтобы IsEnabled принял противоположное значение, чем выражение привязки, которое я в настоящее время предоставляю.
Как я могу сделать это?Спасибо.
Вам нужно использовать так называемый преобразователь значений (класс, реализующий 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>
Текущий синтаксис уже соответствует вашим потребностям. Это отключит флажок, если переключатель не отмечен.
Если вы действительно хотите инвертировать сценарий, все, что вам нужно, это конвертер. Взгляните на этот образец .