如何正确实施文本框验证

时间:2015-05-19 07:27:24

标签: wpf validation c#-4.0 mvvm data-binding

我是WPF的新手,并创建了一个文本框很少的应用程序。使用MVVM将文本框绑定到某些源。现在当我点击“保存”按钮时,它应该激活所有空文本框的验证,并且不应该触发保存事件。我怎样才能在WPF中实现这一点。

我已经写过验证器,但没有调用。请参阅下面的代码:

<TextBox Width="250" Grid.Row="0" Grid.Column="1" Margin="10">
        <TextBox.Text>
            <Binding Path="ContinuousModel.FileName" ValidatesOnDataErrors="True" NotifyOnValidationError="True" Mode="TwoWay" ValidatesOnExceptions="True">
                <Binding.ValidationRules>
                    <validate:RequiredFieldValidatation />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>


public class RequiredFieldValidatation:ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (value == null || value.ToString() == string.Empty)
            return new ValidationResult(false, "Value cannot be empty");
        return ValidationResult.ValidResult;
    }
}

只有在写入某些文本然后更改焦点然后返回并删除值然后更改焦点时,才会调用上述验证器。

注意:使用MVVM和datatemplates,我正在加载varios用户控件,这些控件绑定到viewmodel。 “保存”按钮位于不同的用户控件中,因此我无法在保存按钮单击事件时手动验证所有文本框。

1 个答案:

答案 0 :(得分:1)

将UpdateSourceTrigger属性添加到绑定中;

<Binding Path="ContinuousModel.FileName" UpdateSourceTrigger=PropertyChanged ValidatesOnDataErrors="True" NotifyOnValidationError="True" Mode="TwoWay" ValidatesOnExceptions="True">
            <Binding.ValidationRules>
                <validate:RequiredFieldValidatation />
            </Binding.ValidationRules>
        </Binding>