2009-09-08 6 views
2

J'ai une ChildWindow où l'utilisateur entre des données dans un champ de texte. Maintenant, quand il clique sur le bouton Soumettre, je dois fermer le ChildWindow seulement si les données entrées sont valides? Comment vérifier cela? J'ai recherché et vu beaucoup d'exemples pour comment valider la zone de texte mais j'ai besoin de savoir comment voir si tout est valide et laisser l'utilisateur fermer la fenêtre?Silverlight Validation - Comment empêcher l'utilisateur de soumettre des données invalides

Répondre

1

Eh bien, j'espère avoir bien compris votre question et je ne suis pas trop naïf.

Comme vous vous avez écrit savez comment valider réellement le contenu de la forme, je serai bref:

Il y a:

private void OKButton_Click(object sender, RoutedEventArgs e) 
{ 
    this.DialogResult = true; 
} 

de la classe ChildWindow, qui gère l'événement Click de la fenêtre de l'enfant. Dans cette méthode, vous appelez votre routine de validation et ne définissez this.DialogResult que si la validation renvoie true. Par exemple. comme ceci:

private void OKButton_Click(object sender, RoutedEventArgs e) 
{ 
    if (MyAweSomeValidation() == true) 
    { 
     this.DialogResult = true; 
    } 
} 

Bien sûr, vous avez besoin de votre propre logique pour MyAweSomeValidation() :)

La propriété DialogResult est mis en œuvre d'une manière qui ferme automagiquement la fenêtre enfant lorsqu'il est réglé. Si vous ne définissez pas la valeur, la fenêtre ne se ferme pas de cette façon. Mais vous devriez dire à l'utilisateur pourquoi il ne ferme pas si vous le manipulez comme ça, bien sûr. :)

HTH

+0

J'utilise this.DialogResult = true; mais le problème est avec MyAweSomeValidation. Comme je suis déjà en train de faire la validation dans Xaml et son erreur d'affichage, alors comment puis-je obtenir ce "Quelque chose ne va pas" sans utiliser beaucoup de code. Je veux dire au moins sans écrire presque la même quantité de code que j'ai déjà écrit en xaml. – Tanmoy

+1

Je suppose que la réponse est "ça dépend". Souhaitez-vous nous montrer/nous les parties pertinentes de votre XAML? Je dois admettre que je ne connais pas les mécanismes de validation avec Silverlight. Une façon serait d'utiliser judicieusement l'élément x: Name pour avoir un accès direct sur l'élément nommé dans le code-behind. Une autre façon serait de travailler avec ValidationExceptions que vous attrapez dans la section appropriée de code-behind. Mais pour moi, c'est une conjecture en ce moment. Un exemple de code (XAML et/ou code-behind) serait utile. – Cornelius

+0

Comme je l'ai dit, je "Can" re-valider dans le fichier cs avec explicitement vérifier tous les contrôles et le re-valider. Actuellement, je le fais de cette façon. Mais cela me semble un code dupliqué car il est déjà validé dans xaml. Est-il possible de dire à un contrôle (comme le ChildWindow dans mon cas) a une erreur de validation "sans vérifier explicitement chaque contrôle"? – Tanmoy

0

Si vous avez un groupe de données faire quelque chose comme ceci:

dataform1.ValidateItem(); 
if (!dataform1.ValidationSummary.HasErrors) 
{ 
    dataform1.CommitEdit(); 
    DialogResult = true; 
} 
Questions connexes