验证企业库验证块的空字段时调用 Required.GetBindingExpression 的位置



在WPF中,当属性值更改时,典型的验证实现会验证。这提出了一个问题。如果您有一个"必需"字段,并且单击按钮,则在单击按钮时,用户不会将其警报为空。由于该值没有更改,因此不会发生验证。

在线有许多方法,您可以在代码范围内,基本视图模型等上明确执行验证。但是,我对Microsoft提出的解决方案感兴趣。特别是,这适用于我当前正在使用的Microsoft Enterprise库中的验证应用程序块。微软在这里建议采用最佳练习方法:https://msdn.microsoft.com/en-us/library/ff664451(v = pandp.50(.aspx

特别是他们说:

如果携带所需验证属性的验证控件的值首先为空,并且在验证过程中保持空,则不会更新源,并且不会发生验证。在这种特殊情况下,ValidateOntargetUpdate属性也无法正常工作,因为目标的无默认值不会更改。相反,您可以在绑定上调用更新以进行强制验证,如下所示:

this.Required.GetBindingExpression(TextBox.TextProperty).UpdateSource();

验证规则在转换后但在将其设置在源上之前,在转换ProposedValue步骤中运行。这意味着必须通过其他机制检测到值转换误差。一种方法是在经过验证的绑定上启用验证的构成属性。

不幸的是,我无法理解这一点。我在哪里调用Updatesource方法?this在Microsoft的摘要中指的是哪个对象?我假设我需要做一些拦截装订的事情,但我不确定。

我弄清楚了。如评论部分所述,我们可以访问窗口或任何控件中的getBindingExpression。我相信Microsoft的目的是Required是控件的示例名称,this是指窗口的CodeBehind,或任何其他具有代码范围的窗口的控件。

此外,在其他地方提出的其他验证结构(例如开发人员实现IDATAERRORINFO时(提出的PropertyChanged事件似乎在Microsoft Enterprise Library的验证块中似乎没有相同的效果。验证不会通过简单地在控件上提出属性换事事件来重新发生。这不是针对必需字段的特定特定的。相反,微软建议在控件上执行UpdateSource,尽管参考了所需的字段。

在这里如何为表格上的所有绑定调用更新?是如何在所有元素上实现UpdateSource的一个示例。

最新更新