2010-11-25 3 views
4

Im en utilisant DataAnnotation pour valider les contrôles d'entrée. Mais ValidatesOnExceptions ne fonctionne que lorsque l'utilisateur tape quelque chose dans la zone de texte et appuie sur Tab. (Fondamentalement sur l'événement Lostfocus).Comment valider les entrées lorsque vous cliquez sur le bouton dans silverlight?

mais si l'utilisateur n'entre jamais rien dans la zone de texte et cliquez sur Envoyer. Ça ne marche pas. Comme la propriété ASP.NET Page.IsValid est-il une propriété ou une méthode dans Silverlight que je peux utiliser, qui va valider tous les contrôles sur l'interface utilisateur?

Répondre

0

Je ne pense pas, qu'il existe un moyen de valider tous les UserControls qui sont visibles sur la page. Mais je vous recommande de jeter un oeil à INotifyDataErrorInfo. C'est, à mon avis, le meilleur moyen de valider les données dans Silverlight. Avec l'approche INotifyDataErrorInfo, vous n'avez pas besoin d'effectuer de modifications dans la vue (comme ValidatesOnException, ...) et vous pouvez facilement valider avec un WebService (ceci n'est pas possible avec les annotations de données).

Jetez un oeil ici: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2009/11/18/silverlight-4-rough-notes-binding-with-inotifydataerrorinfo.aspx

espoir que cela vous aide.

+0

INotifyDataErrorInfo est en effet l'approche pour la validation Silverlight MVVM, mais ne résout pas le problème des contrôles de validation sur le bouton. –

1

En prenant l'aide de l'URL fournie par Terence, j'ai préparé la solution ci-dessous pour vous. Cela vous permet de vérifier que toutes les propriétés sont définies avant l'appel de service.

public class PersonViewModel : EntityBase 
{ 
    private readonly RelayCommand saveCommand; 

    public PersonViewModel(IServiceAgent serviceAgent) 
    { 
     saveCommand = new RelayCommand(Save) { IsEnabled = true }; 
    } 

    public RelayCommand SaveCommand // Binded with SaveButton 
    { 
     get { return saveCommand; } 
    } 

    public String Name // Binded with NameTextBox 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
      PropertyChangedHandler("Name");     
      ValidateName("Name", value); 
     } 
    } 

    public Int32 Age // Binded with AgeTextBox 
    { 
     get 
     { 
      return age; 
     } 
     set 
     { 
      age = value; 
      PropertyChangedHandler("Age"); 
      ValidateAge("Age", value); 
     } 
    } 

    private void ValidateName(string propertyName, String value) 
    { 
     ClearErrorFromProperty(propertyName); 
     if (/*SOME CONDITION*/)  
      AddErrorForProperty(propertyName, "/*NAME ERROR MESSAGE*/");   
    } 

    private void ValidateAge(string propertyName, Int32 value) 
    { 
     ClearErrorFromProperty(propertyName); 
     if (/*SOME CONDITION*/)  
      AddErrorForProperty(propertyName, "/*AGE ERROR MESSAGE*/");    
    } 

    public void Save() 
    { 
     ValidateName("Name", name); 
     ValidateAge("Age", age);   
     if (!HasErrors) 
     {     
      //SAVE CALL TO SERVICE 
     } 
    }  
}