2010-09-09 41 views
18

Đây là một chút của một whodunnit WPF! ngôi đền xác nhận của tôi nó không xuất hiện khi dự kiến ​​
Validation ErrorTemplate không hiển thị trên các lỗi dữ liệu

Vấn đề

Về cơ bản, tôi đang sử dụng IDataErrorInfo trên mô hình quan điểm của tôi để cung cấp thông tin phản hồi về lỗi nhập dữ liệu. Tôi có thể thấy điều này được gọi và làm việc như mong đợi, nhưng mẫu lỗi xác nhận cho điều khiển bị ràng buộc không bao giờ được hiển thị bởi WPF!

Tôi đã thử cả bằng cách sử dụng mẫu lỗi biên giới viền hộp văn bản mặc định được xây dựng sẵn, mẫu lỗi kiểu và mẫu được mã hóa cứng. Không có điều nào trong số này được hiển thị trong tình huống lỗi dữ liệu.

Heres đang ràng buộc XAML của tôi:

<TextBox x:Name="txtCaseNumber" 
Text="{Binding Path=CaseNumber, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"/> 

Wierdly, lỗi được vào bộ sưu tập Validation.Errors. Các mã sau kết quả trong thông báo lỗi IDataErrorInfo của tôi nhận được hiển thị bên cạnh kiểm soát bị ràng buộc. Điều này dẫn tôi đến suy nghĩ vấn đề là ở phía bên xaml, thay vì bên viewmodel.

<ContentPresenter 
Content="{Binding ElementName=txtCaseNumber, Path=(Validation.Errors).CurrentItem}" /> 

Ngoài ra, System.Windows.Controls.Validation.GetHasError(txtCaseNumber) trả về giá trị đúng.

Tôi đang lưu trữ WPF trong biểu mẫu thắng nếu điều đó tạo nên sự khác biệt. Tôi không thể tìm thấy bất kỳ tài liệu tham khảo trong mã hoặc phong cách của tôi để xác nhận hoặc ErrorTemplate vì vậy tôi khá chắc chắn đây không phải là một mục tiêu riêng của phong cách.

Trả lời

41

Nứt nó.

Thuộc tính đính kèm ErrorTemplate uses the adorner layer để hiển thị mẫu lỗi về lỗi xác thực dữ liệu được báo cáo qua IDataErrorInfo. Lớp Adorner là not always available cho tất cả các điều khiển trong mọi tình huống. Kiểm soát của bạn hoặc một trong các phụ huynh của nó cần phải cung cấp một cách rõ ràng.

Mẫu điều khiển cửa sổ mặc định chứa AdornerDecorator cho phép lớp adorner cho con của nó. Đây là lý do tại sao cửa sổ khác của tôi hiển thị mẫu lỗi của tôi, vì cửa sổ này đã sử dụng mẫu điều khiển mặc định

Cửa sổ không hiển thị mẫu lỗi của tôi đã sử dụng kiểu ControlTemplate cho cửa sổ của tôi. Mẫu kiểm soát này không cung cấp <AdornerDecorator>, do đó không có lớp adorner nào để hiển thị mẫu lỗi của tôi.

Cách khắc phục đơn giản như gói mẫu kiểm soát cửa sổ của tôi với <AdornerDecorator>.

+5

Tôi tip mũ của tôi cho bạn, Sir! Tôi đã có một UserControl> Expander> Textbox trong một phần mở rộng VS. Nhưng nó sẽ không hiển thị các lỗi IDataErrorInfo. Đã tạo một ứng dụng mẫu WPF để lưu trữ vấn đề UC - vẫn tồn tại (VS Extn đã loại trừ). Thực hiện một máy ảo khác - đã làm việc loại bỏ VM. Sau đó, tôi nhấn bài đăng của bạn - thêm một vài trình xử lý sự kiện được tải vào cửa sổ và UC. Chắc chắn rồi, UC đã trả về một AdornerLayer trống. Bao bọc nội dung mở rộng với AdornerDecorator và nó đã hoạt động! Làm chậm tôi xuống 2 ngày .. sống n học tôi đoán. Một lần nữa, cảm ơn sự kiên trì và thời gian để ghi lại nó cho hậu thế !! – Gishu

+0

không có probs! tôi mất 2 ngày trên nó là tốt: ( –

+1

Điều này chỉ cố định vấn đề của tôi với một cửa sổ theo phong cách Metro mà không cung cấp một AdornerDecorator. – mortware

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