对于交叉发布我深感抱歉(我在Silverlight论坛上提出了这个问题,但没有得到回应)
我有一个实体,我正在尝试在其中使用验证,因此我已经装饰了一个属性,如下所示:
[Required]
[StringLength(10)]
public string Code
{
get
{
return this.code;
}
set
{
if (this.code != value)
{
this.code = value;
this.SendPropertyChanged("Code");
}
}
}
我有一个对象列表绑定到一个网格。如果我放置一个空条目,它会显示验证错误。如果我放置太长的代码,我会得到验证错误。完美!但是...
我希望能够阻止用户保存实体,因此我向实体添加了以下内容:
public bool IsValid()
{
try
{
this.Validate();
}
catch
{
return false;
}
return true;
}
public void Validate()
{
var ctx = new ValidationContext(this, null, null);
Validator.ValidateObject(this, ctx);
}
当我尝试保存时,我会对每个对象调用IsValid方法,如果返回false则不会保存。这对于必填属性有效(如果Code为空,则无法保存),但对于StringLength无效(可以保存任何长度的Code)。
我在这里创建了一个简单的项目以重现此问题:
http://walkersretreat.co.nz/files/Slvalidation.zip
有人能帮忙吗?
谢谢!
马克