Validasi Kuat di WPF TextBoxes

Ketika bekerja dengan aplikasi yang terikat data di Windows Presentation Foundation (WPF), validasi sangat penting untuk memastikan bahwa input pengguna baik valid maupun aman. Salah satu skenario umum adalah sebuah TextBox yang terikat pada properti desimal yang bisa bernilai null, seperti tinggi badan. Namun, masalah muncul ketika TextBox masih dapat kehilangan fokus meskipun nilai yang tidak valid dimasukkan. Dalam posting blog ini, kita akan menjelajahi strategi efektif untuk menerapkan validasi kuat di WPF, dengan fokus khusus pada dua metode kunci untuk menangani status input dari sebuah TextBox.

Masalah: Memastikan Input Pengguna yang Valid

Pertimbangkan sebuah TextBox dalam aplikasi Anda yang terikat pada properti desimal, yang memungkinkan pengguna untuk memasukkan nilai tinggi badan. Ketika seorang pengguna memasukkan nilai yang tidak dapat dikonversi menjadi desimal, TextBox menyoroti kesalahan. Namun, ada risiko bahwa pengguna mungkin mengalihkan fokus dari TextBox, meninggalkan aplikasi dalam keadaan tidak valid. Untuk mengatasi ini, kita akan melihat dua solusi potensial:

  1. Mencegah TextBox kehilangan fokus sampai nilai yang valid dimasukkan.
  2. Mengembalikan konten TextBox ke nilai valid terakhir ketika kehilangan fokus dengan input yang tidak valid.

Solusi 1: Mencegah Kehilangan Fokus

Salah satu cara efektif untuk mempertahankan fokus pada TextBox hingga input valid diberikan adalah dengan menangani peristiwa PreviewLostKeyboardFocus. Pendekatan ini melibatkan pemblokiran pergeseran fokus secara programatik setiap kali keadaan tidak valid terdeteksi. Berikut adalah cara Anda dapat mengimplementasikan solusi ini:

Implementasi XAML

Pertama, tambahkan pengendali peristiwa untuk PreviewLostKeyboardFocus dalam definisi TextBox Anda:

<TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus" 
         Text="{Binding Height, UpdateSourceTrigger=PropertyChanged, 
                         ValidatesOnExceptions=True, 
                         Converter={StaticResource NullConverter}}" />

Implementasi Kode C#

Selanjutnya, implementasikan pengendali peristiwa dalam kode belakang Anda untuk mencegah kehilangan fokus:

private void TextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
    TextBox box = sender as TextBox;
    var binding = box.GetBindingExpression(TextBox.TextProperty);
    
    // Periksa kesalahan validasi
    if (binding.HasError) {
        // Blokir pergeseran fokus
        e.Handled = true;
    }
}

Dengan menggunakan metode ini, TextBox tidak akan membiarkan fokus hilang sampai pengguna memasukkan desimal yang valid. Ini memastikan integritas data pada tahap input.

Solusi 2: Mengembalikan ke Nilai Valid Terakhir

Solusi lain adalah mengembalikan konten TextBox ke entri valid terakhir saat fokus hilang. Ini bisa sangat berguna dalam aplikasi yang ramah pengguna di mana mempertahankan keadaan terakhir yang valid adalah pilihan yang lebih baik.

Metode yang Ada

Anda mungkin sudah menerapkan bentuk dasar ini dalam pengendali peristiwa LostKeyboardFocus Anda. Untuk kelengkapan, berikut adalah cara struktur yang dapat dibangun:

private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
    TextBox box = sender as TextBox;
    var binding = box.GetBindingExpression(TextBox.TextProperty);
    
    if (binding.HasError) {
        binding.UpdateTarget(); // Mengembalikan ke nilai valid terakhir
    }
}

Meskipun metode ini bekerja, mungkin tidak memberikan solusi yang paling elegan dalam skenario di mana umpan balik langsung diperlukan. Selain itu, jika pengguna terus melakukan input yang tidak valid, hal ini dapat menyebabkan frustrasi jika mereka bingung dengan nilai-nilai sebelumnya yang mereka coba masukkan.

Kesimpulan

Mengimplementasikan validasi kuat di kontrol TextBox WPF dapat secara signifikan meningkatkan pengalaman pengguna dengan memastikan bahwa hanya data valid yang diproses. Dengan mencegah kehilangan fokus atau mengembalikan ke nilai valid terakhir, Anda dapat mempertahankan integritas data yang dikumpulkan aplikasi Anda. Pilih metode yang paling sesuai dengan kebutuhan aplikasi Anda untuk memberikan pengalaman yang efisien dan ramah pengguna.

Dengan menerapkan teknik-teknik ini, Anda dapat meningkatkan ketahanan formulir pengisian data Anda dan mengarahkan pengguna Anda menuju interaksi yang sukses dengan aplikasi Anda.