IDataErrorInfo:如何知道所有属性是否有效?

J4N*_*J4N 7 validation wpf idataerrorinfo

我有一个WPFapplication(.Net 3.5),它使用IDataErrorInfoViewModel来验证输入.

它运行良好,用户控制获得正确的UI反馈.

问题是用户仍然可以更改所选元素,或保存此元素.

所以我的问题是:我怎么知道我的所有财产都有效?或者至少我所有显示的值都是有效的.目标是IsActive在这个结果上绑定一些

Bob*_*ale 17

从您对实施IDataErrorInfo改变实施的评论到这种风格....

#region IDataErrorInfo Members

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

public string this[string columnName]
{
    get
    {
        StringBuilder result = new StringBuilder();
        if (string.IsNullOrEmpty(columnName) || columnName == "FirstName")
        {
            if (string.IsNullOrEmpty(FirstName))
                result.Append("Please enter a First Name\n");
        }
        if (string.IsNullOrEmpty(columnName) || columnName == "LastName")
        {
            if (string.IsNullOrEmpty(LastName))
                result.Append("Please enter a Last Name\n");
        }
       if (string.IsNullOrEmpty(columnName) || columnName == "Age")
        {
            if (Age < = 0 || Age >= 99)
                result.Append("Please enter a valid age\n");
        }
        return (result.Length==0) ? null : result.Remove(result.Length-1,1).ToString();
    }
}

#endregion


public bool IsValid {
   get { return string.IsNullOrEmpty(this.Error); }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的财产改变事件

if (e.PropertyName == "Error") {
   OnPropertyChanged(this,new PropertyChangedEventArgs("IsValid"));
}
if (e.PropertyName != "Error" && e.PropertyName != "IsValid") {
   OnPropertyChanged(this,new PropertyChangedEventArgs("Error"));
}
Run Code Online (Sandbox Code Playgroud)