Принудительно установить один или несколько флажков - PullRequest
2 голосов
/ 12 мая 2011

У меня есть три флажка, которые имеют свои собственные ошибки, проверяющие, является ли их проверка действительной, но я также хотел бы убедиться, что по крайней мере один должен быть проверен перед продолжением. В настоящее время я использую 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 result;
    }

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

1 Ответ

2 голосов
/ 12 мая 2011

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

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

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

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