单击按钮后检查IDataErrorInfo中是否有错误

时间:2014-08-07 05:40:48

标签: wpf mvvm idataerrorinfo

我正在使用IDataErrorInfo来验证我的字段,字段的绑定和错误显示都正常工作。但我不知道SaveButton如何知道字段中是否存在错误?目前我找到了解决此问题的方法。但我确信有更好的方法可以做到这一点。

以下是我的代码的一部分,我认为你需要看到它来帮助我:

型号:

public TransactionModel : IDataErrorInfo
{
    public enum Field
    {
        Col1, 
        Col2
        Col3,
        //...
    };

    public List<Field> Errors = new List<Field>();

    public string Error { get { throw new NotImplementedException(); } }

    public string this[string columnName]
    {
        get
        {
            string result = string.Empty;
            switch (columnName)
            {
                case "col1":
                    //validation goes here
                    if (errors found)
                    {
                        result = "error message";
                        Errors.Add(Field.Col1);
                    }
                    else
                    {
                        result = string.Empty;
                        if (Errors.Exists(x => x == Field.Col1))
                            Errors.Remove(Field.Col1);
                    }
                    break;
                case "col2":
                    //validation goes here
                    if (errors found)
                    {
                        result = "error message";
                        Errors.Add(Field.Col2);
                    }
                    else
                    {
                        result = string.Empty;
                        if (Errors.Exists(x => x == Field.Col2))
                            Errors.Remove(Field.Col2);
                    }
                    break;
                case "col3":
                    //etc....
                return result;
            }
        }
    }   
}

查看:

<Button Command="{Binding SaveCommand}" Content="Save"/>

视图模型:

public ICommand SaveCommand
{
    get { return new DelegateCommand(Save); }
}

private void Save()
{
    if (Transaction.Errors.Count <= 0)
    {
        //save transaction routine goes here
    }
    else
    {
        MessageBox.Show("Please correct the errors in red", "Error");
    }
}

谢谢你的帮助! :)

1 个答案:

答案 0 :(得分:1)

您应该将Error属性的实现更改为:

public string Error
{
    get { return this[null]; }
}

然后为了简单起见添加另一个属性:

public bool IsValid 
{
   get { return string.IsNullOrEmpty(this.Error); }
}