c# - 验证错误阻止调用属性 setter

标签 c# wpf validation data-binding xaml

我正在寻找以下问题的简单解决方案:

我正在使用一个简单的 TextBox 控件,其 Text 属性绑定(bind)到后面代码中的一个属性。此外,我正在使用验证规则来通知用户输入格式错误。

...错误显示样式在这里...

现在,在将有效数据输入到 TextBox 后,用户可以点击一个按钮来发送数据。单击按钮时,将评估并发送代码后面的绑定(bind)属性 UserName 中的数据。

问题是用户可以在 TextBox 中输入有效数据,这将在属性 UserName 中设置。如果用户随后决定更改 TextBox 中的文本并且数据变为无效,则在验证失败后不会调用属性 UserName 的 setter 。

这意味着最后的有效数据保留在属性 UserName 中,而 TextBox 显示带有错误指示符的无效数据。如果用户随后单击按钮发送数据,将发送最后一个有效数据而不是当前的 TextBox 内容。

我知道如果数据无效我可以停用该按钮,事实上我这样做了,但是该方法是在 UserName 的 setter 中调用的。如果在验证失败后未调用该按钮,则该按钮将保持启用状态。

所以问题是:如何在验证失败后调用属性 setter ?

最佳答案

您可以设置 ValidationRule.ValidationStep验证规则的属性为 ValidationStep.UpdatedValue .这首先更新源,然后执行验证。这意味着,即使您的验证失败,也应该调用您的属性 setter 。请注意,此属性仅在 .NET 3.5 SP1 及更高版本中可用。有关详细信息,请参阅 this blog post (段落“我如何使用它?(第 1 部分)”)。

关于c# - 验证错误阻止调用属性 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808880/

相关文章:

c# - 发布到 ReCAPTCHA

c# - 引入 1 毫秒延迟的更简单的 C# 代码?

c# - 我的命令触发后如何使用 MVVM 清除我的文本框

wpf - 如何在C#(代码隐藏)中旋转文本 block 中的文本~~

wpf - 如何使用 MVVM 以编程方式将列添加到 wpf 数据网格?

ruby-on-rails - Rails 中的模型验证以测试数字是否可以为 nil 或某个正整数

c# - 是否可以编译一个C#程序在Android手机上运行?

file - YII2 如何为文件类型添加自定义验证规则

jquery - 如何检查 Bootstrap 模式是否打开,以便我可以使用 jquery 验证?

c# - 从基本系统类型到字符串的转换是否可逆?