使用ValidationRules进行验证-“确定”按钮应触发验证,而不是继续执行
本文关键字:验证 继续 执行 按钮 ValidationRules 确定 使用 | 更新日期: 2023-09-27 18:27:04
我有一个简单的示例应用程序,两个文本框,一个验证规则和一个按钮。我希望我的按钮触发验证,如果它无效,就不要继续执行。
<TextBox>
<TextBox.Text>
<Binding Path="FirstName">
<Binding.ValidationRules>
<local:MyValidationRule ErrorMessage="Enter first name" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox>
<TextBox.Text>
<Binding Path="LastName">
<Binding.ValidationRules>
<local:MyValidationRule ErrorMessage="Enter last name" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Button Command="{Binding OkCommand}" Content="Ok" />
验证规则:
public class MyValidationRule : ValidationRule
{
public string ErrorMessage { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string valueToCheck = value as string;
if (string.IsNullOrWhiteSpace(valueToCheck))
{
return new ValidationResult(false, ErrorMessage);
}
else
{
return new ValidationResult(true, null);
}
}
}
My OkCommand为空方法:
OkCommand= new RelayCommand(OkRequested);
private void OkRequested()
{
// Do stuff
}
然而,无论文本框是否为空,OkCommand
都会正确执行。我在这里做错了什么?如果文本框无效,我希望它们被设置样式(我已经从示例中排除了样式),但这并没有发生。
您应该在OkCommand
中添加这样的内容。其他文本框也是如此。
if ( Validation.GetHasError( textBox1 ) )
{
MessageBox.Show( Validation.GetErrors( textBox1 )[0].ErrorContent.ToString() );
return;
}