我有一个简单的示例应用程序,2个文本框,验证规则和按钮。 我希望我的按钮触发验证,如果它无效,则不继续执行。
<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);
}
}
}
我的OkCommand是空方法:
OkCommand= new RelayCommand(OkRequested);
private void OkRequested()
{
// Do stuff
}
但是,无论文本框是否为空OkCommand
都可以正确执行。我在这做错了什么?如果文本框无效(我已经从示例中排除了样式),我想要设置文本框样式,但这不会发生。
答案 0 :(得分:1)
你应该加入OkCommand
这样的东西。对于其他textBoxes也一样。
if ( Validation.GetHasError( textBox1 ) )
{
MessageBox.Show( Validation.GetErrors( textBox1 )[0].ErrorContent.ToString() );
return;
}