#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); }
}
然后在你的财产变更事件中
if (e.PropertyName == "Error") {
OnPropertyChanged(this,new PropertyChangedEventArgs("IsValid"));
}
if (e.PropertyName != "Error" && e.PropertyName != "IsValid") {
OnPropertyChanged(this,new PropertyChangedEventArgs("Error"));
}
3条答案
按热度按时间9avjhtql1#
根据您对
IDataErrorInfo
实现的评论,将您的实现更改为这种风格。然后在你的财产变更事件中
5n0oy7gb2#
现在,我在我的模型上添加了这个方法。
我将对象本身绑定到PropertyChanged事件上,
当它改变时,我调用这个方法,如果结果与我实际的公共成员不同,我就更新它:
然后我可以绑定IsValid属性。
我不知道是否有更好的解决方案。
oxalkeyp3#
谢谢鲍勃·维尔的主意!我注意到我有几个模型,代码非常重复。我创建了这个基类:
下面是用法: