2011-08-16 30 views
5

Silverlight/WPF DependencyProperty cho phép ràng buộc dữ liệu và cho biết khi thuộc tính đã thay đổi về giá trị, mà không cần triển khai INotifyPropertyChanged. Câu hỏi của tôi là làm thế nào để làm việc ở mức độ thấp - làm thế nào để DependencyProperty hoặc DependencyObject thực hiện thông báo thay đổi này khi không DependencyObject, DependencyProperty và DispatcherObject định nghĩa bất kỳ sự kiện nào. Điều này có liên quan gì đến tài sản DispatcherObject.Dispatcher không?Hiểu cách DependencyProperty hoạt động và được triển khai

thuộc tính phụ thuộc, hoặc các lớp DependencyObject, không natively hỗ trợ INotifyPropertyChanged cho mục đích sản xuất thông báo những thay đổi trong giá trị tài sản nguồn DependencyObject cho dữ liệu ràng buộc hoạt động.

tuyệt vời làm rõ này được chụp từ-cho-word từ:

http://msdn.microsoft.com/en-us/library/ms752914.aspx

http://msdn.microsoft.com/en-us/library/ms753358.aspx

Trả lời

1

Vâng, khi bạn đăng ký một DependencyProperty bạn cung cấp một callback được gọi khi thay đổi giá trị .

Here bạn có thêm chi tiết. Tôi không nghĩ rằng bất cứ điều gì khác là công khai về các bên trong của WPF. Tôi có thể sai.

4

Thuộc tính phụ thuộc được tích hợp chặt chẽ với hệ thống liên kết nội bộ. Vì vậy, thay vì "thông báo rằng thuộc tính đã thay đổi", mã đặt thuộc tính phụ thuộc có thể gọi trực tiếp vào hệ thống ràng buộc và yêu cầu nó cập nhật.

Tương tự, những thứ như thuộc tính kế thừa/đính kèm có thể được cập nhật trên bất kỳ phần tử con cháu nào và/hoặc bố trí/đo/sắp xếp có thể được cập nhật. Nó thậm chí có thể cho biết bất kỳ kích hoạt (trong Styles hoặc ControlTemplates) sẽ được đánh giá lại.

Bộ điều phối không thực sự liên quan, nhưng có thể được sử dụng trong quá trình này.

Vì vậy, trong ngắn hạn, nó được nướng vào WPF/Silverlight.

+0

"Thuộc tính phụ thuộc chỉ có thể được sử dụng bởi các loại DependencyObject" từ các liên kết ref ở trên. DependencyObject xuất phát từ DispatcherObject. –

+0

@Webster - Vâng, đó là sự thật. Bạn có câu hỏi về điều đó không? – CodeNaked

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