C# WPF Binding - Checkbox Is Not Checked?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Du benötigst dafür einen IValueConverter, welcher den Wert des IsChecked-Property negiert.

Zunächst legst du dir also eine neue Klasse an:

class InverseBooleanConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    if (targetType != typeof(bool))
    {
      throw new ArgumentException("Wrong target type, must be a bool");
    }

    return !((bool)value);
  }

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

Die ConvertBack-Methode benötigt keine konkrete Implementation, da das Binding ja einseitig abläuft.

Im XAML-View wird der Converter als statische Ressource eingebunden und das Binding festgelegt:

<StackPanel>
  <StackPanel.Resources>
    <local:InverseBooleanConverter x:Key="InverseBooleanConverter"/>
  </StackPanel.Resources>

  <CheckBox x:Name="Checkbox">Disable textbox</CheckBox>
  <TextBox IsEnabled="{Binding ElementName=Checkbox, Path=IsChecked, Converter={StaticResource InverseBooleanConverter}}"/>
</StackPanel>

2t3113RD3RFR4G3 
Fragesteller
 19.06.2019, 12:27

Vielen Dank. Das ist aber echt schwach, das es für True einen Einzeiler reicht und für den Negativ Wert dann so ein Konstrukt :D

0
regex9  19.06.2019, 12:48
@2t3113RD3RFR4G3

Eine Alternative wäre es, eine Subklasse zur Checkbox-Komponente anzulegen und diese mit einem neuen Property (Unchecked) zu versehen. Dann wäre ein Binding ohne Converter wieder möglich.

0