在WPF中,典型的验证实现在属性值更改时进行验证。这提出了一个问题。如果您有“必填”字段,并且您单击某个按钮,则用户在点击按钮时不会收到空的提醒。由于该值没有变化,验证不会发生。何时调用Required.GetBindingExpression验证企业库的验证块的空字段
有许多方法可以在线执行此验证,在代码隐藏,基础视图模型等中明确执行验证。但是,我对Microsoft提出的解决方案感兴趣。特别是,这适用于我目前使用的Microsoft企业库中的验证应用程序块。 Microsoft建议的最佳实践方法,在这里: https://msdn.microsoft.com/en-us/library/ff664451(v=pandp.50).aspx
特别是他们的状态:
如果验证控制携带必需的验证属性是空的,首先,和验证过程中保持为空值,源不会更新并且不会进行验证。在这种特殊情况下,ValidateOnTargetUpdate属性不起作用,因为目标的空默认值不会改变。相反,你可以在绑定调用UpdateSource强制验证发生,如下所示:
this.Required.GetBindingExpression(TextBox.TextProperty).UpdateSource();
的验证规则在ConvertedProposedValue步骤进行操作,该值已经被转换之后,但在它被设置来源。这意味着价值转换错误必须通过其他机制来检测。一种方法是在验证的绑定上启用ValidatesOnDataErrors属性。
不幸的是,我无法理解这一点。我在哪里调用UpdateSource方法? this
在微软的代码片段中提及哪个对象?我假设我需要做一些事情,比如拦截某个地方的绑定,但我不确定。
你的'Window'类没有要求就会有这个功能,所以如果你在'MainWindow.xaml.cs'中输入它,它会给你'GetBindingExpression'函数。这也可以在任何'Controls'中使用。 – XAMlMAX