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
.
Nguồn
2010-02-19 16:28:49
+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. –