Язык программирования C#9 и платформа .NET5
Часть 568 из 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. Это позволяет привести в порядок обработку ошибок. В начале индексаторного метода очистите ошибки для столбца. Затем обработайте результаты проверок достоверности и в заключение предоставьте специальную логику для сущности. Ниже показан обновленный код индексатора:INotifyDataErrorInfopublic 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 == "ModelT"){AddError(nameof(Make), "Too Old");}break;case nameof(Color):CheckMakeAndColor();break;case nameof(PetName):break;}return string.Empty;}}Запустите приложение, выберите один из автомобилей и введите в поле Color текст, содержащий более 50 символов. После превышения порога в 50 символов аннотация данных
создает ошибку проверки достоверности, которая сообщается пользователю (рис. 28.5).StringLengthНастройка свойства ErrorTemplate
Финальной темой является создание стиля, который будет применяться, когда элемент управления содержит ошибку, а также обновление
для отображения более осмысленного сообщения об ошибке. Как объяснялось в главе 27, элементы управления допускают настройку посредством стилей и шаблонов элементов управления.ErrorTemplateНачните с добавления в раздел
файлаWindow.Resourcesнового стиля с целевым типомMainWindow.xaml. Добавьте к стилю триггер, который устанавливает свойства, когда свойствоTextBoxимеет значениеValidation.HasError. Свойствами и устанавливаемыми значениями являютсяtrue,Background(Pink)иForeground(Black). В элементахToolTip(ErrorContent)для свойствSetterиBackgroundнет ничего нового, но синтаксис установки свойстваForegroundтребует пояснения. Привязка (ToolTip) указывает на элемент управления, к которому применяется данный стиль, в этом случаеBinding. Путь (TextBox) представляет собой первое значениеPathв коллекцииErrorContent. Разметка выглядит следующим образом:Validation.Errors<Window.Resources><Style TargetType="{x:Type TextBox}"><Style.Triggers><Trigger Property="Validation.HasError" Value="true"><Setter Property="Background" Value="Pink" /><Setter Property="Foreground" Value="Black" /><Setter Property="ToolTip"Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/></Trigger></Style.Triggers></Style></Window.Resources>
