wpf - 如何正确实现文本框验证

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

我是 WPF 新手,我创建了一个文本框很少的应用程序。文本框使用 MVVM 绑定(bind)到某些源。现在,当我单击保存按钮时,它应该对所有空文本框进行验证,并且不应触发保存事件。如何在 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 和数据模板,我正在加载各种用户控件,并且这些控件绑定(bind)到 viewmodel。保存按钮位于不同的用户控件中,因此我无法在保存按钮单击事件时手动验证所有文本框。

最佳答案

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

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

关于wpf - 如何正确实现文本框验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30319264/

相关文章:

php - 使用自定义验证约束检查数据库中是否存在条目

javascript - html5 验证表单所需的 ="true"和自定义检查

c# - C# 4.0 中的类属性/字段可以是匿名类型吗?

Java Streams 与 .Net (C#) LINQ

Django 管理员 : Unique email verification fails against self

c# - 在 C# 中读取选中哪个 RadioButton 的正确方法是什么?

WPF - 如何让某些 ListView 项目跨越列?

.net - WPF 为 Silverlight/Windows Phone 7 设计自定义 UI 组件

c# - ThreadStart 和 Action 之间的区别

c# - 如果绑定(bind)不匹配,则将项目添加到 itemssource