Câu trả lời:
Các thuộc tính phụ thuộc là các thuộc tính của các lớp xuất phát từ DependencyObject và chúng đặc biệt trong đó thay vì chỉ sử dụng trường sao lưu để lưu trữ giá trị của chúng, chúng sử dụng một số phương thức trợ giúp trên DependencyObject.
Điều thú vị nhất ở họ là họ có tất cả hệ thống ống nước để liên kết dữ liệu được tích hợp. Nếu bạn liên kết một cái gì đó với họ, họ sẽ thông báo cho họ khi họ thay đổi.
Lời giải thích duy nhất tôi thấy hữu ích và được viết tốt là đây: http://www.wpftutorial.net/dependencyproperIES.html
Về cơ bản, DependencyProperies khác với các thuộc tính thông thường ở chỗ chúng không chỉ là setters / getters cho các trường trong lớp, mà chúng còn tự động truy xuất các giá trị thực của chúng trong thời gian chạy. Các SetValue()
phương pháp của người bị ảnh hưởng là khá đơn giản và thiết lập giá trị cục bộ của tài sản với giá trị bạn đã cho nó. Tuy nhiên, khi bạn cố gắng GetValue()
từ DependencyProperty, trước tiên, nó sẽ tìm giá trị cục bộ, nếu không có giá trị nào (có thể tồn tại trong DependencyProperies không giống như các thuộc tính thông thường), nó sẽ tiếp tục cây UI hợp lý cho đến khi tìm thấy giá trị đó. Nếu khung đã đạt đến đỉnh của cây mà không tìm thấy bất kỳ giá trị cục bộ nào, thì nó sẽ sử dụng giá trị mặc định được xác định trước làm giá trị của thuộc tính.
Phương pháp này cho phép DependencyProperies tiêu thụ ít bộ nhớ hơn các thuộc tính thông thường do chỉ các giá trị được người dùng đặt rõ ràng sẽ được lưu trữ cục bộ.
Và, như đã đề cập ở trên, DependencyProperies cũng cho phép chúng tôi liên kết với chúng trong mã XAML và đặt các kích hoạt trên chúng, điều mà trên các thuộc tính thông thường không được phép.
Tôi hy vọng tôi đã xoay sở để xóa đi một số sự mơ hồ :)
Grid.Row="1"
trên Button
di chúc sẽ đặt nó ở Hàng số 2 trên cha mẹ Grid
(do thực tế là các hàng dựa trên số không) nhưng Row
DependencyProperty thuộc về Grid
đối tượng.
DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed
, ý bạn là cả ràng buộc trong XAML và cài đặt kích hoạt hoặc chỉ cài đặt kích hoạt không được phép. Cảm ơn đã theo dõi và giúp làm cho mọi thứ rõ ràng hơn!
Value
tài sản (Không phải DP) có giá trị 0 và bạn muốn chế độ xem của mình thực hiện điều gì đó khi Value
thay đổi thành 1. Bạn sẽ có thể làm như vậy bằng cách sử dụng DataTrigger
và đặtBinding={Binding Path=Value, Value=1}
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ cung cấp một giải thích tốt về các thuộc tính phụ thuộc cả trong bối cảnh của WF và WPF.
Một đoạn trích:
Điểm chính - Giá trị của các thuộc tính phụ thuộc được giải quyết
Mục tiêu cuối cùng của một tài sản phụ thuộc, giống như bất kỳ tài sản nào, là quản lý nhà nước. Nhưng không giống như các thuộc tính .Net bình thường, giá trị thuộc tính cục bộ không được lưu trữ trong một biến thể hiện.
Thay vào đó, các thuộc tính phụ thuộc được đăng ký với khung thuộc tính phụ thuộc và giá trị thuộc tính cơ bản được giải quyết - có nghĩa là giá trị được xác định bởi khung thuộc tính phụ thuộc dựa trên các quy tắc được xác định bởi đăng ký thuộc tính.