it-swarm-id.com

Aturan Pengikatan dan Validasi Data WPF Praktik Terbaik

Saya memiliki aplikasi WPF yang sangat sederhana di mana saya menggunakan pengikatan data untuk memungkinkan pengeditan beberapa objek CLR kustom. Saya sekarang ingin memasukkan validasi input ketika pengguna mengklik simpan. Namun, semua buku WPF yang saya baca tidak benar-benar menyediakan ruang untuk masalah ini. Saya melihat bahwa Anda dapat membuat ValidationRules kustom, tetapi saya bertanya-tanya apakah ini akan berlebihan untuk kebutuhan saya.

Jadi pertanyaan saya adalah ini: apakah ada contoh aplikasi yang bagus atau artikel di suatu tempat yang menunjukkan praktik terbaik untuk memvalidasi input pengguna di WPF?

100
Mark Heath

Saya pikir cara baru yang disukai mungkin menggunakan IDataErrorInfo

Baca lebih lanjut di sini

83
rudigrobler

Dari MS dokumentasi Pola & Praktek :

Validasi Data dan Pelaporan Kesalahan

Model atau model tampilan Anda akan sering diminta untuk melakukan validasi data dan memberi sinyal kesalahan validasi data apa pun ke tampilan sehingga pengguna dapat bertindak untuk memperbaikinya.

Silverlight dan WPF menyediakan dukungan untuk mengelola kesalahan validasi data yang terjadi ketika mengubah properti individual yang terikat pada kontrol dalam tampilan. Untuk properti tunggal yang terikat data ke kontrol, model tampilan atau model dapat memberi sinyal kesalahan validasi data dalam properti setter dengan menolak nilai buruk yang masuk dan melemparkan pengecualian. Jika properti ValidatesOnExceptions pada pengikatan data benar, mesin pengikat data di WPF dan Silverlight akan menangani pengecualian dan menampilkan isyarat visual kepada pengguna bahwa ada kesalahan validasi data.

Namun, melemparkan pengecualian dengan properti dengan cara ini harus dihindari sedapat mungkin. Pendekatan alternatif adalah mengimplementasikan antarmuka IDataErrorInfo atau INotifyDataErrorInfo pada model tampilan Anda atau kelas model. Antarmuka ini memungkinkan model tampilan Anda atau model untuk melakukan validasi data untuk satu atau lebih nilai properti dan untuk mengembalikan pesan kesalahan ke tampilan sehingga pengguna dapat diberitahu tentang kesalahan tersebut.

Dokumentasi selanjutnya menjelaskan bagaimana menerapkan IDataErrorInfo dan INotifyDataErrorInfo.

23
Pat

personaly, saya menggunakan pengecualian untuk menangani validasi. membutuhkan langkah-langkah berikut:

  1. dalam ekspresi pengikatan data Anda, Anda perlu menambahkan "ValidatesOnException = True"
  2. di objek data yang Anda ikat, Anda perlu menambahkan pengendali DependencyPropertyChanged di mana Anda memeriksa apakah nilai baru memenuhi kondisi Anda - jika tidak - Anda mengembalikan ke objek nilai lama (jika perlu) dan Anda melempar pengecualian.
  3. di templat kontrol yang Anda gunakan untuk menampilkan nilai yang tidak valid di kontrol, Anda bisa mengakses pengumpulan kesalahan dan menampilkan pesan pengecualian.

kuncinya di sini, adalah untuk mengikat hanya ke objek yang berasal dari DependencyObject. implementasi sederhana INotifyPropertyChanged tidak akan berfungsi - ada bug dalam framework, yang mencegah Anda mengakses koleksi kesalahan.

10
Greg

Periksa juga artikel ini . Seharusnya Microsoft merilis Enterprise Library (v4.0) dari pola dan praktik mereka di mana mereka membahas subjek validasi tetapi Tuhan tahu mengapa mereka tidak memasukkan validasi untuk WPF, jadi posting blog yang saya arahkan Anda juga menjelaskan apa yang penulis lakukan untuk mengadaptasinya. Semoga ini membantu!

3
murki

Anda mungkin tertarik dengan BookLibrary contoh aplikasi dari WPF Application Framework (WAF) = . Ini menunjukkan cara menggunakan validasi di WPF dan bagaimana mengontrol tombol Simpan ketika kesalahan validasi ada.

2
jbe

Jika kelas bisnis Anda secara langsung digunakan oleh UI Anda lebih disukai untuk menggunakan IDataErrorInfo karena lebih dekat dengan pemiliknya.

Jika kelas bisnis Anda adalah kelas rintisan yang dibuat oleh referensi ke layanan WCF/XmlWeb maka Anda tidak bisa/tidak boleh menggunakan IDataErrorInfo atau melempar Pengecualian untuk digunakan dengan ExceptionValidationRule. Sebaliknya, Anda dapat:

  • Gunakan ValidationRule kustom.
  • Tentukan kelas parsial dalam proyek UI WPF Anda dan implementasikan IDataErrorInfo.
0
Alex Pollan