[英]WPF IDataErrorInfo and NHibernate Validation - how to trigger a Validate?
[英]How to Clear WPF IDataErrorInfo Validation Errors
我正在使用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数据上下文,新鲜的实体对象...但是没有运气
我感谢您的帮助。
使用IDataErrorInfo
接口是错误优先类型的方法。 这意味着您将看到错误,直到将其清除。 您会看到索引器上没有设置器。
原始的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
, Property2
和PropertyN
时,您需要调用名称为Errors
的INotifyPropertyChanged.PropertyChanged
事件以使此工作有效。
您可以执行类似的操作,但是当您想清除错误时,可以添加一个setter来传递空的集合或字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.