0

我有一堆带有数据验证的文本框,如下所示:

xml

<TextBox>
    <TextBox.Text>
        <Binding Path="Name" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <local:Validation2/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

C#

public class Validation2 : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        double result;
        return double.TryParse(value.ToString(), out result) == true ? new ValidationResult(true, null) : new ValidationResult(false, "error");
    }
}

这很好用,每当我在文本框中输入除数字以外的任何内容时,都会弹出错误。现在我有一个发送“表单”的按钮,我希望该按钮在执行任何操作之前检查是否有任何验证错误。我将如何去做。

4

1 回答 1

0

在将新值应用于源属性之前进行验证。在您的情况下 - 当您更改财产时。在wpf也有少数更多的情况下,但没有OnFormClosing或类似。这是设计使然:控件属性可能绑定到其他控件属性(或多个控件绑定到同一属性),因此最迟在您更改焦点时进行验证。

如果您没有交叉绑定,一个属性只绑定到一个控件,那么您可以使用-在表单即将关闭时UpdateSourceTrigger.Explicit调用每个绑定。UpdateSource()

其他解决方案是不要将错误显示为popups。错误状态可能是红色边框或!附近的图标。

我自己根本不使用验证机制。相反,我有自我验证控件,例如,TextBox使用属性IsDouble来启用double值和属性的自动验证GetDouble,以解析值。我更喜欢在最后验证所有内容,同时向用户显示验证是否可以的实际状态(每个控件的红色边框、闪烁的标题等)。

于 2014-09-05T14:26:07.097 回答