2009-09-29 3 views
3

Извинения для кросс проводки (я спросил это на Silverlight Forum, но не получил никакого ответа)Silverlight 3 Validation - ручная проверка не работает?

У меня есть объект, который я пытаюсь использовать проверки на так что я украсили свойство, как так:

[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 метод на каждом объект, а не сохранять, если он ложный. Это отлично работает для требуемого атрибута (он не будет сохранять, если код пуст), но не для StringLength (я могу сохранить с любым кодом длины).

Я воспроизвел это в простом проекте здесь:

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

Может кто-нибудь помочь?

Спасибо!

Марк

ответ

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; 
    } 

} 

Конечно, ваши интерфейсы могут быть ablolutely anorther, но я рекомендую использовать его.

Кроме того, вы можете вызвать validateHandler из своего элемента управления и проверить, например, после нажатия каждой клавиши.

Смежные вопросы