Язык программирования 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.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 == "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.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>