Starke Validierung in WPF-TextBoxen
Bei der Arbeit mit datenbindenden Anwendungen in Windows Presentation Foundation (WPF) ist die Validierung entscheidend, um sicherzustellen, dass Benutzereingaben sowohl gültig als auch sicher sind. Ein häufiges Szenario ist ein TextBox
, das an eine nullable Dezimal-Eigenschaft gebunden ist, wie zum Beispiel Höhe. Ein Problem tritt auf, wenn der TextBox
den Fokus verlieren kann, selbst wenn ein ungültiger Wert eingegeben wird. In diesem Blogbeitrag werden wir effektive Strategien zur Implementierung einer starken Validierung in WPF erkunden, wobei wir uns speziell auf zwei wesentliche Methoden konzentrieren, um den Eingabestatus eines TextBox
zu handhaben.
Das Problem: Sicherstellung gültiger Benutzereingaben
Betrachten Sie einen TextBox
in Ihrer Anwendung, der an eine Dezimal-Eigenschaft gebunden ist, die es Benutzern ermöglicht, Höhenwerte einzugeben. Wenn ein Benutzer einen Wert eingibt, der nicht in eine Dezimalzahl umgewandelt werden kann, hebt der TextBox
einen Fehler hervor. Es besteht jedoch das Risiko, dass der Benutzer den Fokus vom TextBox
wegnimmt, was die Anwendung in einem ungültigen Zustand belässt. Zur Lösung dieses Problems werden wir zwei mögliche Lösungen betrachten:
- Verhindern, dass der
TextBox
den Fokus verliert, bis ein gültiger Wert eingegeben wird. - Den Inhalt des
TextBox
auf den letzten gültigen Wert zurücksetzen, wenn er mit einer ungültigen Eingabe den Fokus verliert.
Lösung 1: Verhindern des Fokusverlusts
Eine effektive Methode, um den Fokus auf dem TextBox
zu halten, bis eine gültige Eingabe bereitgestellt wird, besteht darin, das PreviewLostKeyboardFocus
-Ereignis zu behandeln. Dieser Ansatz beinhaltet das programmgesteuerte Blockieren des Fokuswechsels, wann immer ein ungültiger Zustand erkannt wird. So können Sie diese Lösung implementieren:
XAML-Implementierung
Fügen Sie zunächst einen Ereignishandler für PreviewLostKeyboardFocus
in Ihrer TextBox
-Definition hinzu:
<TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus"
Text="{Binding Height, UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True,
Converter={StaticResource NullConverter}}" />
C# Code-Implementierung
Implementieren Sie als Nächstes den Ereignishandler in Ihrem Code-Behind, um den Fokusverlust zu verhindern:
private void TextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
TextBox box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
// Überprüfen auf Validierungsfehler
if (binding.HasError) {
// Fokuswechsel blockieren
e.Handled = true;
}
}
Mit dieser Methode wird der TextBox
den Fokus nicht verlieren, bis der Benutzer eine gültige Dezimalzahl eingegeben hat. Dies gewährleistet die Datenintegrität in der Eingabestufe.
Lösung 2: Rücksetzen auf den letzten gültigen Wert
Eine weitere Lösung besteht darin, den Inhalt des TextBox
auf den letzten gültigen Eintrag zurückzusetzen, wenn der Fokus verloren geht. Dies kann besonders nützlich in benutzerfreundlichen Anwendungen sein, in denen es bevorzugt wird, den letzten gültigen Zustand beizubehalten.
Bestehende Methode
Möglicherweise haben Sie bereits eine grundlegende Form davon in Ihrem LostKeyboardFocus
-Ereignishandler implementiert. Hier ist, wie es strukturiert werden kann:
private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
TextBox box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
if (binding.HasError) {
binding.UpdateTarget(); // Rücksetzen auf den letzten gültigen Wert
}
}
Obwohl diese Methode funktioniert, bietet sie möglicherweise nicht die eleganteste Lösung in Szenarien, in denen sofortiges Feedback erforderlich ist. Darüber hinaus kann es zu Frustration führen, wenn die Benutzer weiterhin ungültige Eingaben machen, da sie über frühere Werte, die sie eingeben wollten, verwirrt sind.
Fazit
Die Implementierung einer starken Validierung in WPF-TextBox
-Steuerelementen kann das Benutzererlebnis erheblich verbessern, da sichergestellt wird, dass nur gültige Daten verarbeitet werden. Durch das Verhindern des Fokusverlusts oder das Zurücksetzen auf den letzten gültigen Wert können Sie die Integrität der Daten, die Ihre Anwendung erfasst, aufrechterhalten. Wählen Sie die Methode, die am besten zu den Anforderungen Ihrer Anwendung passt, um ein effizientes und benutzerfreundliches Erlebnis zu bieten.
Durch den Einsatz dieser Techniken können Sie die Robustheit Ihrer Dateneingabeformulare verbessern und Ihre Benutzer zu erfolgreichen Interaktionen mit Ihrer Anwendung führen.