it-swarm-vi.tech

Quy tắc ràng buộc và xác thực dữ liệu WPF Thực tiễn tốt nhất

Tôi có một ứng dụng WPF rất đơn giản trong đó tôi đang sử dụng liên kết dữ liệu để cho phép chỉnh sửa một số đối tượng CLR tùy chỉnh. Bây giờ tôi muốn đặt một số xác nhận đầu vào khi người dùng nhấp vào lưu. Tuy nhiên, tất cả những cuốn sách WPF tôi đã đọc không thực sự dành bất kỳ khoảng trống nào cho vấn đề này. Tôi thấy rằng bạn có thể tạo Xác thực tùy chỉnh, nhưng tôi tự hỏi liệu điều này có quá mức cho nhu cầu của tôi không.

Vì vậy, câu hỏi của tôi là: có một ứng dụng mẫu hay bài viết nào đó ở đâu đó thể hiện thực tiễn tốt nhất để xác thực đầu vào của người dùng trong WPF?

100
Mark Heath

Tôi nghĩ rằng cách ưa thích mới có thể là sử dụng IDataErrorInfo

Đọc thêm tại đây

83
rudigrobler

Từ MS's Tài liệu về Mô hình & Thực tiễn :

Xác thực dữ liệu và báo cáo lỗi

Mô hình hoặc mô hình khung nhìn của bạn thường sẽ được yêu cầu thực hiện xác thực dữ liệu và báo hiệu mọi lỗi xác thực dữ liệu cho chế độ xem để người dùng có thể hành động để sửa chúng.

Silverlight và WPF cung cấp hỗ trợ để quản lý các lỗi xác thực dữ liệu xảy ra khi thay đổi các thuộc tính riêng lẻ bị ràng buộc với các điều khiển trong chế độ xem. Đối với các thuộc tính duy nhất được liên kết dữ liệu với điều khiển, mô hình hoặc mô hình khung nhìn có thể báo hiệu lỗi xác thực dữ liệu trong bộ thiết lập thuộc tính bằng cách từ chối giá trị xấu đến và ném ngoại lệ. Nếu thuộc tính ValidatesOnExceptions trên liên kết dữ liệu là đúng, công cụ liên kết dữ liệu trong WPF và Silverlight sẽ xử lý ngoại lệ và hiển thị một dấu hiệu trực quan cho người dùng rằng có lỗi xác thực dữ liệu.

Tuy nhiên, nên tránh các ngoại lệ với các thuộc tính theo cách này nếu có thể. Một cách tiếp cận khác là triển khai các giao diện IDataErrorInfo hoặc INotifyDataErrorInfo trên mô hình xem hoặc các lớp mô hình của bạn. Các giao diện này cho phép mô hình hoặc mô hình xem của bạn thực hiện xác thực dữ liệu cho một hoặc nhiều giá trị thuộc tính và trả lại thông báo lỗi cho chế độ xem để người dùng có thể được thông báo về lỗi.

Tài liệu tiếp tục giải thích cách triển khai IDataErrorInfo và INotifyDataErrorInfo.

23
Pat

cá nhân, tôi đang sử dụng ngoại lệ để xử lý xác nhận. nó yêu cầu các bước sau:

  1. trong biểu thức liên kết dữ liệu của bạn, bạn cần thêm "ValidatesOnException = True"
  2. trong đối tượng dữ liệu bạn đang ràng buộc, bạn cần thêm trình xử lý DependencyPropertyChanged nơi bạn kiểm tra xem giá trị mới có đáp ứng các điều kiện của bạn hay không - nếu không - bạn khôi phục lại giá trị cũ của đối tượng (nếu bạn cần) và bạn ném ngoại lệ.
  3. trong mẫu điều khiển bạn sử dụng để hiển thị giá trị không hợp lệ trong điều khiển, bạn có thể truy cập bộ sưu tập Lỗi và hiển thị thông báo ngoại lệ.

mẹo ở đây, là chỉ liên kết với các đối tượng xuất phát từ DependencyObject. triển khai đơn giản INotifyPropertyChanged sẽ không hoạt động - có một lỗi trong khung, ngăn bạn truy cập bộ sưu tập lỗi.

10
Greg

Đồng thời kiểm tra bài viết này . Được cho là Microsoft đã phát hành Thư viện doanh nghiệp (v4.0) từ các mô hình và thực tiễn của họ, nơi họ đề cập đến chủ đề xác thực nhưng chúa mới biết tại sao họ không đưa vào xác thực cho WPF, vì vậy bài đăng trên blog tôi đang chỉ đạo bạn, giải thích những gì tác giả đã làm để thích nghi với nó. Hi vọng điêu nay co ich!

3
murki

Bạn có thể quan tâm đến ứng dụng mẫu BookL Library của Khung ứng dụng WPF (WAF) = . Nó cho thấy cách sử dụng xác nhận trong WPF và cách kiểm soát nút Lưu khi tồn tại lỗi xác thực.

2
jbe

Nếu lớp doanh nghiệp của bạn được sử dụng trực tiếp bởi giao diện người dùng của bạn thì có thể sử dụng IDataErrorInfo vì nó đặt logic gần hơn với chủ sở hữu của họ.

Nếu lớp doanh nghiệp của bạn là một lớp sơ khai được tạo bởi tham chiếu đến dịch vụ WCF/XmlWeb thì bạn không thể/không được sử dụng IDataErrorInfo cũng như không ném Exception để sử dụng với ExceptionValidationRule. Thay vào đó bạn có thể:

  • Sử dụng Xác thực tùy chỉnh.
  • Xác định một lớp một phần trong dự án UI WPF của bạn và triển khai IDataErrorInfo.
0
Alex Pollan