2010-02-19 23 views
6

Làm cách nào chúng tôi có thể hiển thị Cảnh báo của người dùng theo cách tương tự như Lỗi. Sự khác biệt duy nhất là kiểm soát, ví dụ: TextBox cần phải có một mẫu lỗi khác và tương tự như Validation.HasError có cần phải là Validation.HasWarning.WPF riêng biệt Lỗi và Cảnh báo Styles

Nói cách khác không phải tất cả các vấn đề xác thực là "lỗi" (trong ứng dụng của chúng tôi ít nhất). Chúng tôi muốn trực quan cho biết liệu có điều gì đó là cảnh báo hoặc lỗi hay không.

Trả lời

3

Thỉnh thoảng tôi có nhu cầu về nền tảng trung gian đó. Giống như Command s cần 3 giá trị từ CanExecute thay vì true hoặc false.

Đối với các cảnh báo hoạt động như xác thực, tôi không biết tất cả các phần sẽ cần phải đặt lại với nhau, nhưng tôi nghĩ tôi biết cách bắt đầu.

Bạn sẽ cần phải dựa vào các thuộc tính đính kèm và các hành vi kèm theo (thuộc tính đính kèm đăng ký các sự kiện trên đối tượng và thực hiện các thao tác liên quan đến các sự kiện đó khi chúng kích hoạt). Bạn có thể có một chi phối tập hợp các đối tượng ValidationRule để sử dụng để xác định liệu cảnh báo có được phát hành hay không, giống như thuộc tính Validation. Bạn có thể có một số gọi là HasWarning được đặt hoặc không được đặt bởi xác thực có thể được tham chiếu trong trình kích hoạt kiểu/mẫu.

Bạn có thể đặt phần hiển thị cảnh báo trong mẫu của mỗi điều khiển hoặc bạn có thể bắt chước Validation và có thuộc tính đính kèm WarningTemplate được sử dụng để đặt thông tin cảnh báo trong AdornerLayer.


Kể từ khi tùy chỉnh ValidationRule đối tượng trả về một đối tượng ValidationResult trong đó ErrorContent chỉ đơn giản là một đối tượng, và đối tượng này cũng được tiếp xúc trong ValidationError đối tượng như ErrorContent, bạn cũng có thể sử dụng xác nhận thường xuyên sau khi tất cả. Bạn có thể sử dụng một lớp làm đối tượng ErrorContent có thuộc tính Cảnh báo hoặc Lỗi ErrorType của Cảnh báo hoặc Lỗi và liên kết với điều đó trong ErrorTemplate của bạn.

Tôi không chắc chắn liệu có hiện diện của ValidationError sẽ ngăn chặn các hoạt động nhất định (chẳng hạn như nhấn nút) mà bạn muốn cho phép, nhưng một số loại proxy trên ViewModel có thể được tạo ra để đánh giá ErrorType.

+0

+1 cho quan sát rằng 'ErrorContent' là một đối tượng, không phải là một chuỗi. Đây là một cách rất đơn giản để thực hiện điều này. Bạn chỉ cần tạo một lớp thông báo với các lớp con lỗi, cảnh báo và thông tin, và một 'DataTemplate' cho mỗi kiểu. –

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