IDataErrorInfo Issue
本文关键字:Issue IDataErrorInfo | 更新日期: 2023-09-27 17:58:27
我的视图模型类中有两个属性[Say Size,StrVal]。约束条件之一是StrVal长度应小于或等于Size;此约束应用于IDataErrorInfo索引器。
public string this[string propertyName]
{
get
{
string msg = null; ;
switch (propertyName)
{
....
case "StrVal":
{
if (this.StrVal.Length > this.SizeOfStringVal)
{
msg = "Size of entered value is greater than the size";
}
}
break;
.........
}
return msg;
}
}
现在考虑以下情况
Size = 5;
StrVal = "ABCDEF" ; // length = 6 > Size
"Error message is generated"
Size = 7 // length of StrVal is less than 7
但在我以编程方式激发"StrVal"属性的propertyChanged事件之前,仍然会显示错误情况。因此,我必须使用以下代码。
public int? Size
{
get
{
return this.size;
}
set
{
if (value == this.Size)
{
return;
}
this.size = value;
this.OnPropertyChanged("StrVal");
}
}
请说明这是否是处理问题的理想方法。当做Anirban
是的,这是IDataErrorInfo
的工作方式,它只会在发生属性更改通知时查询验证错误。因此,理想情况下,您的Size
属性将如下所示:
public int? Size
{
get
{
return this.size;
}
set
{
if (value == this.Size)
{
return;
}
this.size = value;
this.OnPropertyChanged("Size");
this.OnPropertyChanged("StrVal");
}
}
即使您可能没有对size属性进行任何验证,您仍然应该(作为"最佳实践")发送属性更改通知。