我正在使用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,新鲜实体对象......但没有运气
感谢您的帮助。
答案 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.PropertyChanged
,Errors
和Property1
更新后,您需要使用名称Property2
来调用PropertyN
事件。
你可以这样做,但是当你想要清除错误时,可以为你添加一个setter来传入一个空的集合或字符串。