WPF TextBox’larda Güçlü Doğrulama
Windows Presentation Foundation (WPF) ile veri bağlamalı uygulamalar geliştirirken, kullanıcı girdilerinin geçerli ve güvenli olmasını sağlamak için doğrulama kritik öneme sahiptir. Yaygın bir senaryo, kullanıcıların yükseklik değerlerini girebileceği bir TextBox
‘ın, null olabilen bir ondalık özelliğe bağlanmasıdır. Ancak, geçersiz bir değer girildiğinde TextBox
‘ın odak kaybetme riski vardır. Bu blog yazısında, WPF’de güçlü doğrulamayı uygulamak için etkili stratejileri keşfedeceğiz; özellikle bir TextBox
‘ın giriş durumu ile başa çıkmak için iki ana yönteme odaklanacağız.
Sorun: Geçerli Kullanıcı Girdisini Sağlamak
Uygulamanızda ondalık bir özelliğe bağlı bir TextBox
olduğunu varsayın; bu kullanıcıların yükseklik değerlerini girmesine olanak tanır. Kullanıcı, ondalık bir değere dönüştürülemeyen bir değer girdiğinde, TextBox
hata vurgusu yapar. Ancak, kullanıcı TextBox
‘ın dışına odaklanabilir ve uygulamayı geçersiz bir durumda bırakabilir. Bunu ele almak için iki potansiyel çözümü inceleyeceğiz:
TextBox
‘ın geçerli bir değer alana kadar odak kaybetmesini engellemek.- Geçersiz bir girdi ile odak kaybettiğinde
TextBox
içeriğini son geçerli değere geri döndürmek.
Çözüm 1: Odak Kaybını Önleme
Geçerli bir girdi sağlanana kadar TextBox
‘ın odakta kalmasını sağlamak için etkili bir yol, PreviewLostKeyboardFocus
olayını yönetmektir. Bu yaklaşım, geçersiz bir durum tespit edildiğinde odak kaymasının programlamayla engellenmesini içerir. İşte bu çözümün nasıl uygulanacağı:
XAML Uygulaması
Öncelikle, TextBox
tanımınıza PreviewLostKeyboardFocus
için bir olay işleyici ekleyin:
<TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus"
Text="{Binding Height, UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True,
Converter={StaticResource NullConverter}}" />
C# Kod Uygulaması
Ardından, odak kaybını önlemek için kod arka planında olay işleyicisini uygulayın:
private void TextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
TextBox box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
// Doğrulama hatalarını kontrol et
if (binding.HasError) {
// Odak kaymasını engelle
e.Handled = true;
}
}
Bu yöntemi kullanarak, TextBox
geçerli bir ondalık değeri girene kadar odak kaybına izin vermeyecektir. Bu, verilerin giriş aşamasında bütünlüğünü korur.
Çözüm 2: Son Geçerli Değere Geri Dönme
Başka bir çözüm, odak kaybedildiğinde TextBox
içeriğini son geçerli giriş ile geri döndürmektir. Bu, son geçerli durumu korumanın tercih edildiği kullanıcı dostu uygulamalar için özellikle yararlı olabilir.
Mevcut Yöntem
LostKeyboardFocus
olay işleyicinizde bunun temel bir biçimini zaten uygulamış olabilirsiniz. Tamamlayıcılık açısından, şu şekilde yapılandırılabilir:
private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
TextBox box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
if (binding.HasError) {
binding.UpdateTarget(); // Son geçerli değere geri döner
}
}
Bu yöntem çalışsa da, acil bir geri bildirim gerektiğinde en zarif çözümü sağlamayabilir. Ayrıca, kullanıcılar geçersiz girdi girmeye devam ederse, önceki değerler hakkında karışıklılara neden olarak hayal kırıklığı yaratabilir.
Sonuç
WPF TextBox
kontrollerinde güçlü doğrulamayı uygulamak, yalnızca geçerli verilerin işlenmesini sağlamakla kalmaz, aynı zamanda kullanıcı deneyimini de önemli ölçüde geliştirir. Odak kaybını engelleyerek veya son geçerli değere geri dönerek, uygulamanızın topladığı verilerin bütünlüğünü koruyabilirsiniz. Uygulama ihtiyaçlarınıza en uygun yöntemi seçerek etkili ve kullanıcı dostu bir deneyim sunabilirsiniz.
Bu teknikleri uygulayarak, veri giriş formlarınızın dayanıklılığını artırabilir ve kullanıcılarınızı uygulamanızla başarılı etkileşimlere yönlendirebilirsiniz.