我使用下面的代码来验证文本框。
<TextBox.Text>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<Validate:RquiredFiledValidation ErrorMessage="Please Provide Login Name"></Validate:RquiredFiledValidation>
</Binding.ValidationRules>
</Binding>
上面的代码工作正常,但是当将updatesourcetrigger更改为Lostfocus时,它会停止工作。
<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>
任何帮助将不胜感激。
答案 0 :(得分:0)
Field的拼写错误:
<Validate:RquiredFieldValidation ErrorMessage="Please Provide Login Name"></Validate:RquiredFieldValidation>
<强>更新强>
来自MSDN上的 UpdateSourceTrigger Enumeration页面:
PropertyChanged
:每当绑定目标属性发生更改时立即更新绑定源,这意味着每次绑定属性更改时都会更新源值。
,而
LostFocus
:每当绑定目标元素失去焦点时更新绑定源,即每次目标控件失去焦点时都会更新源值。如果您未对目标进行任何属性更改,则源将保持不变。
正如Jim Zhou所说here,我们可以调用BindingExpression.UpdateSource
方法来强制重置数据源。所以在这种情况下,我们可以在LostFocus
上挂起TextBox
事件并调用
明确BindingExpression.UpdateSource
方法。像这样:
private void OnLostFocus(object sender, RoutedEventArgs e)
{
TextBox text = sender as TextBox;
BindingOperations.GetBindingExpression(text, TextBox.TextProperty).UpdateSource();
}
另请参阅ValidationRule的ValidatesOnTargetUpdated属性。它将验证何时首次加载数据。如果您尝试捕获空字段或空字段,这很好。您可以在绑定验证规则中添加类似的内容:
<DataErrorValidationRule ValidatesOnTargetUpdated="True" />
没什么相关但你可能会喜欢dkozl's answer。
希望有所帮助。:)