button nur dann aktivieren wenn wenigstens ein checkbox mit häckchen gestzt ist
-
hallo,ich habe 3 checkbox und ein button.Ich möchte wenn mindestens ein checkbox gelickt(haken gestzt) ist button Enabled machen.Hat jemand bitte eine idee in welche methode und wie ich das machen soll??
Danke im Voraus
-
Pack diese Funktion in CheckedChanged deiner 3 Checkboxen
private void checkBox_CheckedChanged(object sender, EventArgs e) { button.Enabled = cb1.Checked||cb2.Checked||cb3.Checked; }
-
Variante 1 (Falls mit events gearbeitet wird und IsChecked nicht gebunden):
<CheckBox x:Name="enabledBox" /> <.. /> <Button IsEnabled="{Binding IsChecked, ElementName=enabledBox}" />
Variante 2 (Falls IsChecked gegen ein Property gebunden wird):
<CheckBox IsChecked="{Binding MyProperty}" /> <.. /> <Button IsEnabled="{Binding MyProperty}" />
//Edit, ach ich seh grad du hast 3 Checkboxen ^^ Vergiss was ich schrieb.
Mit mehreren CheckBoxen gehen die Varianten nicht, da kannst du nur gegen ein Property binden der je nach Check state gesetzt wird. Oder ein MultiBinding mit nem Converter...
-
So meinte ich, es können nun beliebig viele Booleans gebunden werden.
public class AnyCheckToEnabledConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return values.Where(i => (bool) i).Count() > 0; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
<Window xmlns:Local="clr-namespace:WpfApplication1"> <Window.Resources> <Local:AnyCheckToEnabledConverter x:Key="AnyCheckToEnabledConverter" /> </Window.Resources> <StackPanel> <CheckBox Content="First" x:Name="firstBox" /> <CheckBox Content="Second" x:Name="secondBox" /> <CheckBox Content="Third" x:Name="thirdBox" /> <Button Content="Demo"> <Button.IsEnabled> <MultiBinding Converter="{StaticResource AnyCheckToEnabledConverter}"> <Binding Path="IsChecked" ElementName="firstBox" /> <Binding Path="IsChecked" ElementName="secondBox" /> <Binding Path="IsChecked" ElementName="thirdBox" /> </MultiBinding> </Button.IsEnabled> </Button> </StackPanel> </Window>
So bleibt die View Arbeit auch wirklich arbeit der View.
(In MVVM umgebunden würde der Button eh ein Command Binden und dort würde man das "CanExecute" entsprechend setzen und der Button würde automatisch deaktiviert.)