2016-09-01 2 views
0

Я хотел бы связать ComboBox с CheckBox, чтобы ComboBox был включен, когда CheckBox не отмечен. Могу ли я сделать это непосредственно в файле xaml, не добавляя в код никакой дополнительной переменной?
В приведенном ниже коде myComboBox включен, когда myCheckBox ckecked.WPF bind ComboBox с CheckBox

<ComboBox Name="myComboBox" SelectedIndex="0" 
    IsEnabled="{Binding ElementName=myCheckBox, Path=IsChecked}"> 

ответ

4

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

public sealed class InvertedBooleanConverter : IValueConverter 
{ 
    public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) 
    { 
     if (value is Boolean) 
     { 
      return (Boolean)value ? false : true; 
     } 

     return null; 
    } 


    public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Затем вам нужно добавить конвертер в ресурсах, как это:

<Window.Resources> 
    <local:InvertedBooleanConverter x:Key="InvertedBooleanConverter" /> 
</Window.Resources> 

И, наконец, просто добавьте нейтрализатор связывание следующим образом:

<ComboBox Name="myComboBox" 
      SelectedIndex="0" 
      IsEnabled="{Binding ElementName=myCheckBox, Path=IsChecked, Converter={StaticResource InvertedBooleanConverter}}"> 
Смежные вопросы