【问题标题】:Silverlight 3 Validation - manual validate not working?Silverlight 3 验证 - 手动验证不起作用?
【发布时间】:2009-09-29 21:43:08
【问题描述】:

为交叉发帖道歉(我在Silverlight Forum 上问过这个问题,但没有得到回应)

我有一个实体,我正在尝试对其使用验证,所以我装饰了一个属性,如下所示:

[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 方法,如果它为假则不保存。 这适用于所需的属性(如果 Code 为空,则不会保存)但不适用于 StringLength(我可以使用任何长度的代码保存)。

我在这里的一个简单项目中复制了这个:

http://walkersretreat.co.nz/files/Slvalidation.zip

谁能帮忙?

谢谢!

标记

【问题讨论】:

    标签: silverlight validation silverlight-3.0


    【解决方案1】:

    你应该写成:

    [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 并检查,例如,在每次用户按键之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      相关资源
      最近更新 更多