2013-07-30 59 views
1

我正在使用IDataErrorInfo继承业务对象进行验证。如何清除WPF 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"; 
      } 
     } 
    } 

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

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

我尝试了所有的选项指定NULL的datacontext,新鲜实体对象......但没有运气

我感谢你的帮助。

回答

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方法是一个扩展方法,我认为是不言自明。此属性可以多次调用索引器,并将所有结果编译为一个ObservableCollection<string>集合,以准备在UI中显示。当需要更新Property1,Property2PropertyN以使其工作时,您需要拨打INotifyPropertyChanged.PropertyChanged事件的名称Errors

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