Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
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.csINotifyDataErrorInfopublic 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 символов аннотация данных
StringLength
Настройка свойства ErrorTemplate
Финальной темой является создание стиля, который будет применяться, когда элемент управления содержит ошибку, а также обновление
ErrorTemplateНачните с добавления в раздел
Window.ResourcesMainWindow.xamlTextBoxValidation.HasErrortrueBackground(Pink)Foreground(Black)ToolTip(ErrorContent)SetterBackgroundForegroundToolTipBindingTextBoxPathErrorContentValidation.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>