如何清除WPF IDataErrorInfo验证错误

时间:2013-07-30 15:28:14

标签: wpf validation idataerrorinfo

我正在使用IDataErrorInfo继承的业务对象进行验证。

public string UserId { get; set; }

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

            if (columnName == "UserId")
            {
                if (string.IsNullOrEmpty(UserId))
                    result = "Please enter User Id";
            }
        }
    }

当我点击菜单上的按钮时,我想清除所有验证错误 - 比如 - LogOut。

窗口使“登录”面板可见,但前一个面板的验证错误标记仍显示在当前登录面板中。

我尝试了所有选项来分配NULL datacontext,新鲜实体对象......但没有运气

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

使用IDataErrorInfo接口是一种错误优先的方法。这意味着您将在清除之前看到错误。您可以看到索引器上没有setter。

原始IDataErrorInfo接口本身并不过分有用,因为它一次只处理一个错误。我在我的BaseDataType课程中添加了以下字段:

protected ObservableCollection<string> errors = new ObservableCollection<string>();

在我的实际数据类中,我有以下属性:

public override ObservableCollection<string> Errors
{
    get
    {
        errors = new ObservableCollection<string>();
        errors.AddUniqueIfNotEmpty(this["Property1"]);
        errors.AddUniqueIfNotEmpty(this["Property2"]);
        errors.AddUniqueIfNotEmpty(this["PropertyN"]);
        return errors;
    }
}

AddUniqueIfNotEmpty方法是一种扩展方法,我认为是不言自明的。此属性会多次调用索引器,并将所有结果编译为准备在UI中显示的ObservableCollection<string>集合。在INotifyPropertyChanged.PropertyChangedErrorsProperty1更新后,您需要使用名称Property2来调用PropertyN事件。

你可以这样做,但是当你想要清除错误时,可以为你添加一个setter来传入一个空的集合或字符串。