Отображать все сообщения об ошибках в каждом текстовом поле во время проверки с использованием IDataErrorInfo - PullRequest
0 голосов
/ 23 октября 2018

У меня небольшая проблема с отображением всех проверок в соответствии с одним свойством (текстовое поле).Теперь моя проверка работает следующим образом:

Текстовое поле помечено красным при запуске и отображает только одно сообщение об ошибке на текстовое поле.Когда я пишу что-то в текстовом поле с множеством валидаторов, они появляются один за другим.

enter image description here

Чего я хочу достичь:

  1. Рамка текстового поля красная при запуске и отображает ВСЕ сообщения об ошибках под текстовым полем.
  2. при успешной проверке проверка ученика должна исчезнуть.

Пример: я использую EmpolyeeSalary.Когда значение, которое я пишу в текстовом поле, меньше 10 и 100, оно должно показывать ВСЕ сообщения об ошибках.Когда я пишу 10, сообщение об ошибке appriopriate должно исчезнуть.

Не могли бы вы помочь мне?Ниже я разместил необходимые части своей модели и файлы xaml.

Employee.cs

public string Error
    {
        get
        {
            return error;
        }
    }
    public string this[string columnName]
    {
        get
        {
            int output;
            error = string.Empty;

        if (columnName == "DynamicSearchEmployeeName" && string.IsNullOrWhiteSpace(DynamicSearchEmployeeName))
        {
            error = "Employee Name is required to add a new Employee !";
        }
        else if (columnName == "DynamicSearchEmployeeSalary" && string.IsNullOrWhiteSpace(DynamicSearchEmployeeSalary))
        {
            error = "Employee Salary is required to add a new Employee !";
        }
        else if (columnName == "DynamicSearchEmployeeSalary" && !Int32.TryParse(dynamicSearchEmployeeSalary, out output))
        {
            error = "Employee Salary has to be number !";
        }
        else if (columnName == "DynamicSearchEmployeeSalary" && EmployeeSalary < 10)
        {
            error = "Employee Salary cannot be less than 10 !";
        }
        else if (columnName == "DynamicSearchEmployeeSalary" && EmployeeSalary < 100)
        {
            error = "Employee Salary cannot be less than 100 !";
        }
        else if (columnName == "DynamicSearchEmployeeDesigner" && string.IsNullOrWhiteSpace(DynamicSearchEmployeeDesigner))
        {
            error = "Employee Designer is required to add a new Employee !";
        }

        return error;
    }
}

MainWindow.xaml

 <ControlTemplate x:Key="ErrorToolTipTemplate_1">
            <ControlTemplate.Resources>
                <Style x:Key="textblockErrorTooltip" TargetType="TextBlock">
                    <Setter Property="HorizontalAlignment" Value="Center" />
                    <Setter Property="VerticalAlignment" Value="Center" />
                    <Setter Property="FontWeight" Value="Bold" />
                    <Setter Property="Foreground" Value="White" />
                    <Setter Property="Margin" Value="0 0 0 0" />
                </Style>
            </ControlTemplate.Resources>
            <DockPanel LastChildFill="true">
                <Border Height="Auto"
   Margin="0,0,0,0"
   Background="#DC000C"
   CornerRadius="0"
   DockPanel.Dock="Bottom">
                    <TextBlock Style="{StaticResource textblockErrorTooltip}" 
Text="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
                </Border>
                <AdornedElementPlaceholder Name="customAdorner">
                    <Border BorderBrush="#DC000C" BorderThickness="1.3" />
                </AdornedElementPlaceholder>
            </DockPanel>
        </ControlTemplate>

        <Style TargetType="TextBox">
            <Setter Property="HorizontalAlignment" Value="Right" />
            <Setter Property="VerticalAlignment" Value="Top" />
            <Setter Property="Width" Value="150" />
            <Setter Property="Height" Value="30" />
            <Setter Property="Validation.ErrorTemplate" 
                 Value="{DynamicResource ErrorToolTipTemplate_1}" />
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip" 
Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
                </Trigger>
            </Style.Triggers>
        </Style>

1 Ответ

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

Ваша конструкция позволит установить только одно значение сообщения об ошибке.

Вам нужно что-то вроде этого ...

if (columnName == "DynamicSearchEmployeeSalary")
{ 
    if (string.IsNullOrWhiteSpace(DynamicSearchEmployeeSalary))
    {
        error += "Employee Salary is required to add a new Employee !";
    }

    if (!Int32.TryParse(dynamicSearchEmployeeSalary, out output))
    {
        error += "\r\nEmployee Salary has to be number !";
    }

    if (EmployeeSalary < 10)
    {
        error += "\r\nEmployee Salary cannot be less than 10 !";
    }

    if (EmployeeSalary < 100)
    {
        error += "\r\nEmployee Salary cannot be less than 100 !";
    }
}
...