WPF-在具有绑定文本的多个文本框中添加验证规则

时间:2018-10-11 09:52:43

标签: c# wpf validation xaml

希望我能很好地解释这一点。

我要实现的目的是创建一个限制文本框中字符大小的验证规则,并将其应用于多个文本框,但是不将其添加到每个文本框中内容的Textbox.Text属性中应用程序。

我已经创建了验证规则:

public class TexboxFieldLengthValidationRule : ValidationRule {
    public int MaxLength { private get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) {
        var result = new ValidationResult(true, null);
        var input = (value ?? string.Empty).ToString();

        if (string.IsNullOrEmpty(input)) {
            return new ValidationResult(false, "This field cannot be empty.");
        }

        return input.Length > MaxLength
            ? new ValidationResult(false, "Maximum number of characters is " + MaxLength + ".")
            : result;
    }
}

我有几个看起来像这样的文本框:

    <TextBox
        Grid.Row="2"
        Grid.Column="1"
        Margin="0,5,5,0"
        mah:TextBoxHelper.ClearTextButton="True"
        mah:TextBoxHelper.Watermark="Remote File Separator (one character maximum)">
        <TextBox.Text>
            <Binding
                Mode="TwoWay"
                NotifyOnValidationError="True"
                Path="Ftp.RemoteFileSeparator"
                UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <validation:TexboxFieldLengthValidationRule MaxLength="1" />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

是否可以通过某种可绑定属性或样式应用此验证规则?因为在解决方案中为每个文本框添加10行代码并不是很好。

我发现的另一种方法是在属性的设置器中引发异常,并使用ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True,对此我不确定其效果如何。

0 个答案:

没有答案