【问题标题】:How do I properly implement Textbox Validation如何正确实施文本框验证
【发布时间】:2015-05-19 07:27:24
【问题描述】:

我是 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 和数据模板,我正在加载各种用户控件,并且这些控件绑定到 viewmodel。保存按钮位于不同的用户控件中,因此我无法在保存按钮单击事件时手动验证所有文本框。

【问题讨论】:

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


    【解决方案1】:

    将 UpdateSourceTrigger 属性添加到您的绑定中;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多