2008-09-25 25 views
5

Chúng tôi đang sử dụng phương pháp chuẩn để các kiểm soát của chúng tôi báo cáo các quy tắc BO bị hỏng. Điều này được thực hiện thông qua IDataError giao diện trong BO của chúng tôi và trong XAML sự kiểm soát được ràng buộc với tài sản của BO vv Cách tiếp cận này hoạt động OK. Nhưng chúng tôi cần hiển thị 2 loại hình ảnh trong giao diện người dùng tùy thuộc vào loại (hoặc danh mục nếu bạn thích) của lỗi không hợp lệ. Nếu đó là trường bắt buộc thì chúng tôi hiển thị CueBanner (dấu nước) nhưng đối với các loại khác, chúng tôi thay đổi màu của bảng điều khiển. Trong cả hai trường hợp, chúng tôi thiết lập loại công cụ của thông báo lỗi.Đây có phải là cách điên rồ để xử lý nhiều loại Xác thực với IDataError và WPF không?

Vấn đề với IDataError là nó không hỗ trợ phương thức/thuộc tính để phân biệt giữa các loại lỗi.

Cách duy nhất tôi có thể làm điều đó là kiểm tra văn bản lỗi, văn bản trường bắt buộc phải chứa từ khóa "bắt buộc". Cách tiếp cận sau không cảm thấy đúng nhưng đó là cách duy nhất tôi có thể xác định loại lỗi và sau đó xử lý nó theo cách phù hợp. Tất cả các quy tắc trường bắt buộc phải có như một phần của văn bản lỗi “trường bắt buộc”. Để làm cho tất cả công việc này tôi đã tạo một thuộc tính phụ thuộc tùy chỉnh được gọi là ErrorMessage. Trong ResourceDictionary của tôi, tôi có một Style.Trigger cho Validation.HasError. Trong đó tôi đặt giá trị thuộc tính phụ thuộc của tôi cho ErrorContent. Bây giờ khi các thuộc tính phụ thuộc của tôi có giá trị thay đổi, tôi có thể kiểm tra văn bản và đặt Validation.SetErrorTemplate (myControl, newErrorTemplate) vào mẫu để phù hợp với kiểu lỗi. Tôi có dây lên một vài sự kiện để kiểm soát như bị mất và đã tập trung để quản lý loại bỏ hoặc thêm các mẫu cueBanner nhưng toàn bộ điều sẽ làm việc. Chỉ là tôi không chắc đó là cách tốt nhất để làm điều đó.

PS. Khi tôi đặt ErrorTemplate, tôi đang làm điều này trong mã, đó là xây dựng và thêm nó. Có cách nào để xác nhận Validation.SetErrorTemplate vào một tài nguyên tĩnh giữ trong tâm trí mà tôi cần phải chuyển đổi giữa ít nhất 2 loại?

những suy nghĩ của bạn xin vui lòng ..

Trả lời

3

Nó sẽ có thể để lấy được một IDataError giao diện có thêm một đặc tính phụ trợ là một điều tra của các loại lỗi. Sau đó, bạn có thể thử và ràng buộc chống lại nó.

+0

Tôi không nghĩ rằng thuộc tính bổ sung có thể truy cập được từ mẫu lỗi. DataContext của ErrorTemplate là bộ sưu tập Validation.Errors. –

0

Nếu bạn đồng ý với cách tiếp cận (chưa được kiểm tra) bị một chút rõ ràng, thì bạn có thể thực hiện như sau: ném ngoại lệ thay vì trả về chuỗi bằng giao diện IDataErrorInfo. Trong ErrorTemplate của bạn, bạn có thể truy cập vào ValidationErrors (và thuộc tính ValidationError.Exception).

Sau đó, bạn sử dụng DataTrigger trên Ngoại lệ kết hợp với bộ chuyển đổi, kiểm tra đúng Loại ngoại lệ và trả về true hoặc false. Nó sẽ là đủ để thực hiện công việc.

Các vấn đề liên quan