Принудительно установить один или несколько флажков

#wpf #checkbox #idataerrorinfo

#wpf #флажок #idataerrorinfo

Вопрос:

У меня есть три флажка, которые имеют собственную проверку ошибок относительно того, допустимы ли они, но я также хотел бы обеспечить, чтобы по крайней мере один из них был проверен перед продолжением. В настоящее время я использую IDataErrorInfo для индивидуальной проверки ошибок и попытался с помощью BindingGroups проверить, что хотя бы один флажок установлен, но безуспешно.

Вот 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>
  

И код проверки ошибок, стоящий за

 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 resu<
    }
  

Есть предложения о том, как я могу заставить флажки отображать ошибку, если хотя бы один не установлен?

Ответ №1:

Чтобы сохранить существующий код, вы можете изменить свое правило проверки данных, чтобы проверять состояние всех трех флажков одновременно.

 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 amp;amp; !two amp;amp; !three )
  {
    return false;
  }
  return rc;
}
  

и уведомлять все три флажка при изменении одного значения, поэтому, когда вы снимаете последний флажок, а затем устанавливаете другой флажок, модель удаляет ошибку проверки.

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