我有一堆文本框都有数据验证,如下所示:
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");
}
}
这很好用,每当我在文本框中放一个数字而不是一个数字时会弹出一个错误。现在我有一个发送“表单”的按钮,我想在执行任何操作之前检查是否存在任何验证错误。我该怎么做呢。
答案 0 :(得分:0)
你可以做Clientside和Serverside(对于禁用Javascript的剂量)。 您可以在Projectoptions中指定客户端。我认为它叫做验证。 在Serverside上,您可以在运行其他代码之前检查模型状态。
答案 1 :(得分:0)
在将新值应用于source属性之前进行验证。在你的情况下 - 当你改变财产。在wpf
中,more个案例也很少,但没有OnFormClosing
或类似案例。它的设计是:控制属性可以绑定到其他控件属性(或绑定到相同属性的几个控件),因此最后在更改焦点时会进行验证。
如果您没有交叉绑定,一个属性只绑定到一个控件,那么您可以使用UpdateSourceTrigger.Explicit
- 在表单即将关闭时为每个绑定调用UpdateSource()
其他解决方案是不要将错误显示为弹出窗口。错误状态可能是红色边框或附近有!
图标。
我自己根本不使用验证机制。相反,我有自我验证控件,例如,TextBox
使用属性IsDouble
来启用double
值和属性GetDouble
的自动验证,以解析值。我更喜欢在最后验证所有内容,同时显示实际状态,如果验证对用户是否正常(红色边框,闪烁字幕等,每个控件)。