C# WPF Binding - Checkbox Is Not Checked?
Ich habe ein Window mit einer Textbox und Checkbox, wenn die Checkbox NICHT CHECKED ist soll die Textbox aktiviert sein.
Ich kenne nur das Binding bzw Path "IsChecked", wie würde das in meinem Fall aussehen müssen, bzw. wie heißt denn der Pfad den ich suche?
1 Antwort
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>
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.
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