2010-10-03 6 views
0

J'ai une classe dans mon application SL4 qui représente une seule entité sur laquelle l'utilisateur saisit des données. Je fais la validation de données comme suit:Silverlight: Désactiver Bouton sur l'erreur de validation? (Problème de validation)

private double cost; 
    public string Cost 
    { 
     get 
     { 
      return String.Format("{0}{1}", DOLLAR_SYMBOL, cost); 
     } 
     set 
     { 
      string price = getPriceFromCost(value); 
      if (!double.TryParse(price, out cost)) 
      { 
       throw new ArgumentException("Please enter a number."); 
      } 

      OnPropertyChanged("Cost"); 
     } 
    } 

Cela fonctionne très bien. Cependant, si l'utilisateur entre une valeur valide, alors une valeur invalide, ignore l'erreur de validation, et soumet les soumissions, l'entité sera créée avec l'ancienne valeur valide. Je voudrais plutôt forcer l'utilisateur à corriger l'erreur. Comment puis-je désactiver le bouton "Ajouter"? En outre, je voudrais faire d'autres formes de validation lorsque l'utilisateur clique sur le bouton d'ajout, mais je veux quand même que le bon effet de la boîte de saisie de texte soit surligné en rouge, avec le message qui apparaît. Comment puis-je faire cela sans lancer ArgumentExceptions?

Répondre

0

Vous pouvez basculer un bool en même temps que vous lançant une exception et lier le bouton IsEnabled de votre bouton à ce booléen. Vous pouvez faire presque n'importe quelle tâche de validation avec les services WCF RIA - je suggère que vous commenciez avec les derniers articles de blog de Jeff Handleys et que vous preniez à partir de là. http://jeffhandley.com/archive/2010/09/22/RiaServicesStandardValidators.aspx

+0

droit, mais ne serait pas je besoin d'un bool pour chaque champ validé? 'IsValidName',' IsValidDate', etc. Si l'utilisateur ne parvient pas à définir l'entrée pour 'Date', je ne veux plus activer le bouton tant qu'une entrée valide n'a pas été présentée pour ce champ. –

+0

c'est un article de blog très utile. J'ai ajouté '[Required]' à plusieurs propriétés dans ma classe d'entité de données. Cependant, rien ne se passe à l'avant. Comment puis-je effectuer cette validation? –

0

Une solution simple sera de suivre ce qui est dit dans ce forum thread. Si vous utilisez uniquement des exceptions pour la validation des entrées, vous devez définir NotifyOnValidationError=True dans la liaison de vos contrôles, puis toutes les erreurs seront annoncées dans l'événement BindingValidationError de votre contrôle. Si vous utilisez Silverlight 4, mieux vaut utiliser INotifyDataErrorInfo.

0
  1. Vous avez besoin d'une propriété dans View Model pour stocker l'état de la propriété IsEnabled de Button (vous devez lier cette propriété dans XAML).
  2. Vous devez maintenant créer un événement Delegate + pour détecter et déclencher l'événement CostChange.
  3. En vue Modèle, abonnez-vous à cet événement et définissez la propriété IsEnabled définie dans 1.