Validation Renforcée dans les TextBoxes WPF
Lors de la création d’applications liées aux données dans Windows Presentation Foundation (WPF), la validation est cruciale pour garantir que les saisies des utilisateurs soient valides et sécurisées. Un scénario courant implique un TextBox
lié à une propriété décimale nullable, comme la hauteur. Cependant, un problème survient lorsque le TextBox
peut toujours perdre le focus même lorsqu’une valeur invalide est saisie. Dans cet article, nous allons explorer des stratégies efficaces pour mettre en œuvre une validation renforcée dans WPF, en nous concentrant spécifiquement sur deux méthodes clés pour gérer l’état d’entrée d’un TextBox
.
Le Problème : Garantir une Saisie Utilisateur Valide
Considérons un TextBox
dans votre application lié à une propriété décimale, qui permet aux utilisateurs de saisir des valeurs de hauteur. Lorsque l’utilisateur saisit une valeur qui ne peut pas être convertie en décimal, le TextBox
souligne une erreur. Cependant, il y a un risque que l’utilisateur déplace le focus en dehors du TextBox
, laissant l’application dans un état invalide. Pour remédier à cela, nous examinerons deux solutions potentielles :
- Empêcher le
TextBox
de perdre le focus tant qu’il n’a pas une valeur valide. - Revenir au contenu du
TextBox
à la dernière valeur valide lorsqu’il perd le focus avec une saisie invalide.
Solution 1 : Prévenir la Perte de Focus
Une méthode efficace pour garder le focus sur le TextBox
jusqu’à ce qu’une entrée valide soit fournie consiste à gérer l’événement PreviewLostKeyboardFocus
. Cette approche consiste à bloquer le changement de focus de manière programmatique chaque fois qu’un état invalide est détecté. Voici comment vous pouvez mettre en œuvre cette solution :
Implémentation XAML
Tout d’abord, ajoutez un gestionnaire d’événements pour PreviewLostKeyboardFocus
dans la définition de votre TextBox
:
<TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus"
Text="{Binding Height, UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True,
Converter={StaticResource NullConverter}}" />
Implémentation du Code C#
Ensuite, implémentez le gestionnaire d’événements dans votre code-behind pour empêcher la perte de focus :
private void TextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
TextBox box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
// Vérifie les erreurs de validation
if (binding.HasError) {
// Bloque le changement de focus
e.Handled = true;
}
}
En utilisant cette méthode, le TextBox
ne permettra pas de perdre le focus tant que l’utilisateur n’a pas entré un décimal valide. Cela garantit l’intégrité des données à l’étape de saisie.
Solution 2 : Revenir à la Dernière Valeur Valide
Une autre solution consiste à revenir au contenu du TextBox
à la dernière entrée valide lorsque le focus est perdu. Cela peut être particulièrement utile dans des applications conviviales où il est préférable de conserver le dernier état valide.
Méthode Existante
Vous avez peut-être déjà mis en œuvre une forme de base de cela dans votre gestionnaire d’événements LostKeyboardFocus
. Pour être complet, voici comment cela peut être structuré :
private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
TextBox box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
if (binding.HasError) {
binding.UpdateTarget(); // Reviens à la dernière valeur valide
}
}
Bien que cette méthode fonctionne, elle pourrait ne pas fournir la solution la plus élégante dans des scénarios où un feedback immédiat est nécessaire. De plus, si les utilisateurs continuent à saisir des valeurs invalides, cela peut entraîner de la frustration s’ils sont confus par les valeurs précédentes qu’ils essayaient de saisir.
Conclusion
Mettre en œuvre une validation renforcée dans les contrôles TextBox
WPF peut considérablement améliorer l’expérience utilisateur en garantissant que seules des données valides soient traitées. En empêchant la perte de focus ou en revenant à la dernière valeur valide, vous pouvez maintenir l’intégrité des données que votre application recueille. Choisissez la méthode qui correspond le mieux aux besoins de votre application pour offrir une expérience efficace et conviviale.
En employant ces techniques, vous pouvez renforcer la robustesse de vos formulaires de saisie de données et guider vos utilisateurs vers des interactions réussies avec votre application.