【问题标题】:WPF Complex ValidationWPF 复杂验证
【发布时间】:2014-08-18 17:07:19
【问题描述】:

好的,所以我有一个 WPF 应用程序(使用 MVVM),它由一个具有两个文本框的视图组成: 名字和姓氏。

它们都必须只包含字母。我通过在相应实体(Worker)上使用属性实现了这一点:

[RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "First Name must consist of letters only.")]


public string FirstName



[RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Last Name must consist of letters only.")]


public string LastName

而且效果很好。但是......我还需要有以下验证规则: 至少一个字段:FirstName 或 LastName 必须填写。

关于如何实现涉及两个字段的验证的任何想法?

预期结果是: 如果没有填写任何字段,则在 FirstName 文本框旁边会出现一条验证消息:必须填写至少名字或姓氏。同样的消息也会出现在姓氏文本框附近。一旦我填写了其中一个字段,两条消息都会消失。

另一个挑战是,如果我在名字文本框中输入数字,我只想在名字文本框上显示错误消息:名字必须仅由字母组成。 而且我希望必须填写至少一个字段的错误(靠近两个文本框)才能消失。

谢谢!

【问题讨论】:

标签: c# wpf validation mvvm


【解决方案1】:

最好实现IDataErrorInfo Interface,或者如果您使用的是.NET 4.5,则最好使用更新的INotifyDataErrorInfo Interface。以IDataErrorInfo 接口为例,您需要为您的数据类型类实现一个索引器,在该索引器中,您可以定义任何您能想到的复杂规则:

public override string this[string propertyName]
{
    get
    {
        string error = string.Empty;
        if ((propertyName == "FirstName" || propertyName == "LastName") && 
            (FirstName == string.Empty || LastName == string.Empty)) 
            error = "You must enter either the First Name or Last Name fields.";
        return error;
    }
}

【讨论】:

  • 谢谢,我已经用 INotifyDataErrorInfo 接口成功完成了。
【解决方案2】:

一种方法是编写您自己的自定义验证属性...这并不难..我为“小于”和“大于”值创建了几个自定义验证属性,其中涉及两个字段...您可以修改它们用于您的姓氏和名字验证,这与“小于”和“大于”相比要简单得多

这是链接

http://bathinenivenkatesh.blogspot.co.uk/2011/09/custom-validation-attributes.html

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多