将“更新”设置为丢失焦点时,验证不会被触发

  • 本文关键字:验证 焦点 更新 设置 wpf xaml
  • 更新时间 :
  • 英文 :


我正在使用以下代码来验证文本框。

<TextBox.Text>
            <Binding Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
                <Binding.ValidationRules>
                    <Validate:RquiredFiledValidation  ErrorMessage="Please Provide Login Name"></Validate:RquiredFiledValidation>
                </Binding.ValidationRules>
            </Binding>

上面的代码正常工作,但是在将更新contatesUrcetrigger更改为丢失的焦点时,它停止工作。

<TextBox.Text>
            <Binding Path="Name" UpdateSourceTrigger="LostFocus" ValidatesOnDataErrors="True">
                <Binding.ValidationRules>
                    <Validate:RquiredFiledValidation  ErrorMessage="Please Provide Login Name"></Validate:RquiredFiledValidation>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>            

任何帮助将不胜感激。

字段的拼写是错误的:

<Validate:RquiredFieldValidation ErrorMessage="Please Provide Login Name"></Validate:RquiredFieldValidation>

更新:

来自 updatesourcetrigger MSDN上的枚举页面:

PropertyChanged:每当绑定目标属性更改时,立即更新绑定源,这意味着每次绑定属性都会更新源值。

LostFocus:每当绑定目标元素失去焦点时,更新绑定源,即每次目标控制失去焦点时,都会更新源值。如果您没有对目标进行任何财产更改,来源将保持不变。

正如Jim Zhou在这里所说的那样,我们可以调用BindingExpression.UpdateSource方法来强制数据源重置。因此,在这种情况下,我们可以在TextBox上连接LostFocus事件并调用 BindingExpression.UpdateSource方法明确。这样的东西:

private void OnLostFocus(object sender, RoutedEventArgs e)
    {
        TextBox text = sender as TextBox;
        BindingOperations.GetBindingExpression(text, TextBox.TextProperty).UpdateSource();
    }

还可以查看验证函数的验证属性属性。首先加载数据时,它将验证。如果您想捕获空字段或无效字段,这很好。比您可以在绑定验证规则中添加类似的内容:

<DataErrorValidationRule ValidatesOnTargetUpdated="True" />

无关,但您可能喜欢DKOZL的答案。

希望有帮助。:)

最新更新