IDataErrorInfo WPF验证规则/组

时间:2013-09-30 13:40:08

标签: wpf validation

我有一个Customer Model对象,需要根据用例使用不同的验证规则。 例如,根据Customer对象的用法,有些属性是可选的,只要它们是必需的。 我使用属性,但它不允许我指定规则集。我不使用具有此功能的企业库。 我可以为此切换到普通的IDataErrorInfo并传递类似RuleSet的属性。如果没有添加企业库,有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

继承是您正在寻找的解决方案。而不是在属性和规则集中隐藏大量逻辑,而不是使用子类。

以下示例显示BaseCustomer允许除了错误名称之外的任何内容。 CustomerWithBadName需要一个坏名字。

class BaseCustomer : IDataErrorInfo
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public virtual string Error
    {
        get { return null; }
    }

    public virtual string this[string columnName]
    {
        get
        {
            string result = null;

            if (columnName == "Name")
            {
                if (Name == "Bad name!")
                {
                    result = "Name must not be bad!";
                }
            }

            return result;
        }
    }
}

class CustomerWithBadName : BaseCustomer
{
    public override string Error
    {
        get { return null; }
    }

    public override string this[string columnName]
    {
        get
        {
            string result = null;

            if (columnName == "Name")
            {
                if (Name != "Bad name!")
                {
                    result = "Name must be bad!!!";
                }
            }

            return result;
        }
    }
}