使用ValidationRules验证 - 确定按钮应触发验证而不是继续执行

时间:2015-12-17 07:32:01

标签: c# wpf validation xaml

我有一个简单的示例应用程序,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都可以正确执行。我在这做错了什么?如果文本框无效(我已经从示例中排除了样式),我想要设置文本框样式,但这不会发生。

1 个答案:

答案 0 :(得分:1)

你应该加入OkCommand这样的东西。对于其他textBoxes也一样。

if ( Validation.GetHasError( textBox1 ) )
{
    MessageBox.Show( Validation.GetErrors( textBox1 )[0].ErrorContent.ToString() );
    return;
}