Правила проверки формы запуска по нажатию кнопки сохранения - PullRequest
0 голосов
/ 30 октября 2018

У меня есть текстовое поле, свойство Text которого установлено так:

<TextBox.Text>
    <Binding Path="PointOfContact">
        <Binding.ValidationRules>
            <local:NotEmptyValidationRule />
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>

Класс NotEmptyValidationRule выглядит следующим образом:

public class NotEmptyValidationRule : ValidationRule
{
    public string Message { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (string.IsNullOrWhiteSpace(value?.ToString()))
        {
            return new ValidationResult(false, Message ?? "A value is required");
        }
        return ValidationResult.ValidResult;
    }
}

Предполагая, что в моей форме есть несколько других элементов управления с одинаково определенными правилами проверки, как получить форму для проверки всех правил всех элементов управления при нажатии кнопки Сохранить?

1 Ответ

0 голосов
/ 30 октября 2018

Я добился этого, реализовав интерфейс INotifyDataErrorInfo в моей модели и сопоставив экземпляры проверки со свойствами. При попытке сохранить, если какая-либо из проверок проверки не удалась, вы бы вызвали событие ErrorsChanged, которое включало бы имя свойства того поля, которое было недействительным. Вам также нужно установить флаг ValidatesOnNotifyDataErrors в true для привязки. Я предполагаю, что вы надеетесь сделать это без сохранения отдельных экземпляров валидаторов, но я не знаю другого пути. Вы также можете при желании удалить валидатор, определенный в xaml, поскольку он является избыточным.

<TextBox.Text>
  <Binding Path="PointOfContact">
    <Binding.ValidatesOnNotifyDataErrors>True</Binding.ValidatesOnNotifyDataErrors>
    <Binding.ValidationRules>
        <local:NotEmptyValidationRule />
    </Binding.ValidationRules>
  </Binding>
</TextBox.Text>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...