我正在使用以下代码来验证文本框。
<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的答案。
希望有帮助。:)