Правило валидации для проверки, имеет ли текст только ASCII - PullRequest
0 голосов
/ 05 ноября 2019

Как проверить одно текстовое поле, чтобы оно содержало только символы ASCII?

<TextBox Name="PbnameText" Visibility="Collapsed" IsReadOnly="False" Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

Я пытался добавить ValidationRule, но для этого всегда нужно реализовать свойства Min и Max

public class NameRule : ValidationRule
{
    public int Min { get; set; }
    public int Max { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (true)
            return new ValidationResult(false, $"Illegal characters or {e.Message}");
        else
            return ValidationResult.ValidResult;
    }
}

1 Ответ

1 голос
/ 05 ноября 2019

Проверка, является ли символ ASCII-символом, довольно просто на самом деле.

Похоже, вы взяли код из примера класса на странице документов .NET . Существует класс для проверки возрастного диапазона, поэтому ему понадобятся свойства Min и Max, но они вам не нужны, и правило проверки, безусловно, не всегда необходимо реализоватьих можно безопасно удалить.

Правило проверки может выглядеть примерно так (C # 7 или более поздняя версия):

using System.Globalization;
using System.Linq;
using System.Windows.Controls;

public class NameRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        return value is string str && str.All(ch => ch < 128)
            ? ValidationResult.ValidResult
            : new ValidationResult(false, "The name contains illegal characters");
    }
}

Часть ch < 128 является проверкой ASCII.

Также необходимо указать, что вы хотите использовать правило в привязке (предположим, что ваше правило находится в пространстве имен c XAML).

<TextBox Name="PbnameText" Visibility="Collapsed" IsReadOnly="False">
    <TextBox.Text>
        <Binding Path="Name" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <c:NameRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Дополнительную информацию можно найти напроверка привязки данных в документах .

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