Silverlight 3 验证 - 手动验证无效?

3

对于交叉发布我深感抱歉(我在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

有人能帮忙吗?

谢谢!

马克

1个回答

0

你应该写成:

[CustomValidation( typeof( MyExtraClassValidation ), "Validate" )]
public class MyExtraClass : Entity, IEditableObject, INotifyPropertyChanged
{
   /****/
}


public class MyExtraClassValidation 
{
    public MyExtraClassValidation ()
    {}

    public static ValidationResult Validate( MyExtraClass myExtraClass )
    {
        if ( /**class is not valid*/)
            return new ValidationResult( "Oops" );

        return ValidationResult.Success;
    }

}

当然,您的接口可能完全不同,但我建议您使用它。

此外,您可以从控件中调用 validateHandler 并在每次用户按键后进行检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接