Проверка WPF, регулярное выражение - PullRequest
1 голос
/ 28 мая 2019

У меня проблема с проверкой в ​​wpf.У меня есть текст textbox

<TextBox x:Name="Login"  Grid.Column="2" Grid.Row="2">
        <TextBox.Text>
            <Binding  Mode="TwoWay" Path="Email"  UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <DataErrorValidationRule />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
        <TextBox.Style>
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>
                            <DockPanel LastChildFill="True">
                                <TextBlock DockPanel.Dock="Bottom" Foreground="Maroon" FontSize="10pt"
                                           Text="{Binding ElementName=Emael, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                                </TextBlock>
                                <Border BorderBrush="DarkRed" BorderThickness="1">
                                    <AdornedElementPlaceholder Name="Emael" />
                                </Border>
                            </DockPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TextBox.Style>
    </TextBox>

и свойства

 public string Error => throw new NotImplementedException();

    public string this[string columnName]
    {
        get
        {
            string error = String.Empty;

            switch (columnName)
            {
                case "Email": 
                    if (Email == null || Email == string.Empty)
                    {
                        error = "Field login must be required";
                    }
                    break;
            }
            return error;
        }
    }

Я не знаю, как использовать регулярное выражение здесь, в конце я использую dataAnnotation

[Required(ErrorMessage = "This field should be filled in")]
[RegularExpression(@"\w+(@)[a-zA-z]+(\.)[a-zA-z]+", ErrorMessage = ("Use the right email format"))]

как написать ту же логику в форме (проверка клиента).может быть лучше написать свой собственный класс проверки и как-то связать со свойством?Что лучше сделать?

1 Ответ

0 голосов
/ 28 мая 2019

Вы можете скопировать аннотации в модель представления и реализовать метод, который их проверяет:

[Required(ErrorMessage = "This field should be filled in")]
[RegularExpression(@"\w+(@)[a-zA-z]+(\.)[a-zA-z]+", ErrorMessage = ("Use the right email format"))]
public string Email { get; set; }

public string Error => throw new NotImplementedException();

public string this[string columnName]
{
    get
    {
        string error = String.Empty;

        switch (columnName)
        {
            case "Email":
                return ValidateModelProperty(Email, columnName);
        }
        return error;
    }
}

private string ValidateModelProperty(object value, string propertyName)
{
    ICollection<ValidationResult> validationResults = new List<ValidationResult>();
    ValidationContext validationContext =
        new ValidationContext(this, null, null) { MemberName = propertyName };
    if (!Validator.TryValidateProperty(value, validationContext, validationResults))
        foreach (ValidationResult validationResult in validationResults)
            return validationResult.ErrorMessage;
    return null;
}

Для получения дополнительной информации см. это сообщение в блоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...