如何在按钮单击时检查ValidationResults

时间:2014-09-05 13:06:55

标签: c# wpf xaml validation validationrule

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

XAML

<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");
    }
}

这很好用,每当我在文本框中放一个数字而不是一个数字时会弹出一个错误。现在我有一个发送“表单”的按钮,我想在执行任何操作之前检查是否存在任何验证错误。我该怎么做呢。

2 个答案:

答案 0 :(得分:0)

你可以做Clientside和Serverside(对于禁用Javascript的剂量)。 您可以在Projectoptions中指定客户端。我认为它叫做验证。 在Serverside上,您可以在运行其他代码之前检查模型状态。

答案 1 :(得分:0)

在将新值应用于source属性之前进行验证。在你的情况下 - 当你改变财产。在wpf中,more个案例也很少,但没有OnFormClosing或类似案例。它的设计是:控制属性可以绑定到其他控件属性(或绑定到相同属性的几个控件),因此最后在更改焦点时会进行验证。

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

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

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