2 Stimmen

Erzwingen der Auswahl von einem oder mehreren Kontrollkästchen

Ich habe drei Kontrollkästchen, die ihre eigene Fehlerprüfung haben, ob sie aktiviert ist gültig, aber ich möchte auch erzwingen, dass mindestens eine aktiviert werden muss, bevor Sie fortfahren. Ich bin derzeit mit IDataErrorInfo für die einzelnen Fehlerprüfung und habe versucht, mit BindingGroups zu überprüfen, dass mindestens eine mit keinem Erfolg überprüft wird.

Hier ist die XAML,

<StackPanel Orientation="Horizontal" Margin="5,2">
    <Label Content="Checkboxes:" Width="100" HorizontalContentAlignment="Right"/>
    <CheckBox Content="One" Margin="0,5">
        <CheckBox.IsChecked>
            <Binding Path="One" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <DataErrorValidationRule />
                </Binding.ValidationRules>
                </Binding>
        </CheckBox.IsChecked>
    </CheckBox>
    <CheckBox Content="Two" Margin="5,5">
        <CheckBox.IsChecked>
            <Binding Path="Two" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <DataErrorValidationRule />
                </Binding.ValidationRules>
                </Binding>
            </CheckBox.IsChecked>
    </CheckBox>
    <CheckBox Content="Three" Margin="0,5">
        <CheckBox.IsChecked>
            <Binding Path="Tree" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <DataErrorValidationRule />
                </Binding.ValidationRules>
            </Binding>
        </CheckBox.IsChecked>
    </CheckBox>
</StackPanel>

Und der Fehlerprüfungscode hinter

public string this[string property]
    {
        get {
            string result = null;
            switch (property) {
                case "One":
                {
                    if (One) {
                        if (CheckValid(One)) {
                            result = "Invalid Entry";
                        }
                    }
                }
                break;
                case "Two":
                    {
                        if (Two) {
                            if (CheckValid(Two)) {
                                result = "Invalid entry";
                            }
                        }
                    }
                break;
                case "Three":
                {
                    if (Three) {
                        if (CheckValid(Three)) {
                           result = "Invalid entry"
                        }
                    }
                }
                break;
            }
        return result;
    }

Haben Sie einen Vorschlag, wie ich die Kontrollkästchen dazu bringen kann, eine Fehlermeldung anzuzeigen, wenn mindestens eines nicht ausgewählt ist?

2voto

Zamboni Punkte 7677

Um Ihren bestehenden Code beizubehalten, können Sie Ihre Datenüberprüfungsregel so ändern, dass der Zustand aller drei Kontrollkästchen gleichzeitig überprüft wird.

case "One":
  {
    if (One)
    {
      if (CheckValid(One))
      {
        result = "Invalid Entry";
      }
    }
    else if (!CheckThreeValid(One, Two, Three))
    {
      result = "Invalid entry";
    }
  }

private static bool CheckThreeValid(bool one, bool two, bool three)
{
  bool rc = true;
  if ( !one && !two && !three )
  {
    return false;
  }
  return rc;
}

und alle drei Kontrollkästchen benachrichtigen, wenn sich ein Wert ändert, so dass, wenn Sie das letzte Kontrollkästchen abwählen und dann ein anderes Kontrollkästchen auswählen, das Modell den Validierungsfehler löscht.

public bool One
{ 
    get { return one; } 
    set 
    { 
        one = value;
        RaisePropertyChanged("One");
        RaisePropertyChanged("Two");
        RaisePropertyChanged("Three");
    } 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X