Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 564 565 566 567 568 569 570 571 572 ... 642

protected string[] GetErrorsFromAnnotations<T>(

  string propertyName, T value)

{

  var results = new List<ValidationResult>();

  var vc = new ValidationContext(this, null, null)

    { MemberName = propertyName };

  var isValid = Validator.TryValidateProperty(

    value, vc, results);

  return (isValid)

    ? null

    : Array.ConvertAll(

        results.ToArray(), o => o.ErrorMessage);

}

Теперь можете модифицировать метод индексатора в файле CarPartial.cs, чтобы проверять наличие любых ошибок, основанных на аннотациях данных. Обнаруженные ошибки должны добавляться в коллекцию ошибок, поддерживаемую интерфейсом INotifyDataErrorInfo. Это позволяет привести в порядок обработку ошибок. В начале индексаторного метода очистите ошибки для столбца. Затем обработайте результаты проверок достоверности и в заключение предоставьте специальную логику для сущности. Ниже показан обновленный код индексатора:

public string this[string columnName]

{

  get

  {

<b>    ClearErrors(columnName);</b>

<b>    var errorsFromAnnotations =</b>

<b>      GetErrorsFromAnnotations(columnName,</b>

<b>        typeof(Car)</b>

<b>        .GetProperty(columnName)?.GetValue(this,null));</b>

<b>    if (errorsFromAnnotations != null)</b>

<b>    {</b>

<b>      AddErrors(columnName, errorsFromAnnotations);</b>

<b>    }</b>

    switch (columnName)

    {

      case nameof(Id):

        break;

      case nameof(Make):

        CheckMakeAndColor();

        if (Make == &quot;ModelT&quot;)

        {

          AddError(nameof(Make), &quot;Too Old&quot;);

        }

        break;

      case nameof(Color):

        CheckMakeAndColor();

        break;

      case nameof(PetName):

        break;

    }

    return string.Empty;

  }

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

}

Запустите приложение, выберите один из автомобилей и введите в поле Color текст, содержащий более 50 символов. После превышения порога в 50 символов аннотация данных StringLength создает ошибку проверки достоверности, которая сообщается пользователю (рис. 28.5).

Настройка свойства ErrorTemplate

Финальной темой является создание стиля, который будет применяться, когда элемент управления содержит ошибку, а также обновление ErrorTemplate для отображения более осмысленного сообщения об ошибке. Как объяснялось в главе 27, элементы управления допускают настройку посредством стилей и шаблонов элементов управления.

Начните с добавления в раздел Window.Resources файла MainWindow.xaml нового стиля с целевым типом TextBox. Добавьте к стилю триггер, который устанавливает свойства, когда свойство Validation.HasError имеет значение true. Свойствами и устанавливаемыми значениями являются Background(Pink), Foreground(Black) и ToolTip(ErrorContent). В элементах Setter для свойств Background и Foreground нет ничего нового, но синтаксис установки свойства ToolTip требует пояснения. Привязка (Binding) указывает на элемент управления, к которому применяется данный стиль, в этом случае TextBox. Путь (Path) представляет собой первое значение ErrorContent в коллекции Validation.Errors. Разметка выглядит следующим образом:

&lt;Window.Resources&gt;

  &lt;Style TargetType=&quot;{x:Type TextBox}&quot;&gt;

    &lt;Style.Triggers&gt;

      &lt;Trigger Property=&quot;Validation.HasError&quot; Value=&quot;true&quot;&gt;

        &lt;Setter Property=&quot;Background&quot; Value=&quot;Pink&quot; /&gt;

        &lt;Setter Property=&quot;Foreground&quot; Value=&quot;Black&quot; /&gt;

        &lt;Setter Property=&quot;ToolTip&quot;

          Value=&quot;{Binding RelativeSource={RelativeSource Self},

          Path=(Validation.Errors)[0].ErrorContent}&quot;/&gt;

      &lt;/Trigger&gt;

    &lt;/Style.Triggers&gt;

  &lt;/Style&gt;

&lt;/Window.Resources&gt;

1 ... 564 565 566 567 568 569 570 571 572 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий