2010-03-24 38 views
16

Tôi đang cố gắng tìm ra chính xác thuộc tính phụ thuộc, nhưng khi tôi tìm bất kỳ đâu để định nghĩa, tôi chỉ tìm "cách sử dụng" chứ không phải "nó là gì ". Hãy tưởng tượng bạn được hỏi về một cuộc phỏng vấn xin việc - tài sản phụ thuộc là gì. Câu trả lời của bạn là gì?Cần định nghĩa ngắn gọn và rõ ràng cho "Thuộc tính phụ thuộc"

Trả lời

16

Một DependencyProperty là thuộc tính có giá trị phụ thuộc (hoặc có thể phụ thuộc) nguồn (chẳng hạn như hoạt ảnh, ràng buộc dữ liệu, kiểu hoặc thừa kế cây trực quan). Giá trị của một thuộc tính thông thường được lưu trữ trong đối tượng nó thuộc về, trong khi bạn có thể nghĩ về một thuộc tính phụ thuộc như được lưu trữ trong cơ sở dữ liệu ở đâu đó. Cơ sở dữ liệu này về cơ bản gồm một từ điển ánh xạ các đối tượng (đối tượng, thuộc tính) các giá trị của chúng, cùng với ánh xạ thuộc tính phụ thuộc vào các thuộc tính khác (ví dụ như khi bạn thay đổi DataContext của một Panel, nó có thể thông báo cho tất cả trẻ em bên trong bảng điều khiển).

Vậy tại sao chúng lưu trữ giá trị thuộc tính trong một số cơ sở dữ liệu ma thuật ở đâu đó? Có một vài lý do:

  • Nó giảm dung lượng bộ nhớ. Thêm một thuộc tính (ngay cả khi giá trị của nó là null) vào một lớp bổ sung 4 byte (8 cho một quy trình 64-bit) của không gian cho mọi cá thể của lớp đó. Một DependencyProperty chỉ chiếm không gian khi một cá thể có một giá trị. Ví dụ, một FrameworkElement có hàng chục thuộc tính phụ thuộc, hầu hết trong số đó không bao giờ được gán giá trị. Nếu tất cả các thuộc tính đó được lưu trữ trong lớp, mỗi cá thể sẽ là hàng trăm byte. Thay vào đó, mỗi cá thể chỉ có khoảng 40 byte.

  • Nó cho phép các thuộc tính được đính kèm. Các thuộc tính như Canvas.LeftGrid.Row phải được lưu trữ trên các đối tượng chưa bao giờ nghe nói đến số Canvas hoặc Grid, vậy bạn đặt chúng ở đâu? Bạn đặt chúng vào một cơ sở dữ liệu ở đâu đó.

  • Nó cho phép thay đổi thuộc tính tự động.Hãy tưởng tượng cách bạn sẽ thực hiện một cái gì đó như kiểu dáng hoặc thừa kế tài sản (khả năng thiết lập một cái gì đó giống như phông chữ hoặc ngữ cảnh dữ liệu trên một phần tử cha và có giá trị truyền cho tất cả các phần tử con). Có tất cả điều này được lưu trữ trong một cơ sở dữ liệu làm cho nó để mã là tất cả ở một nơi thay vì được thực hiện riêng cho từng đối tượng và tài sản cần nó.

+0

Với tham chiếu đến điểm đầu tiên, vấn đề không gian byte không bao giờ xuất hiện trong các winform có nhiều thuộc tính trong các điều khiển của nó. – thewpfguy

+0

thewpfguy: Các điều khiển Winforms được hỗ trợ bởi hWnds có quá nhiều chi phí mà số lượng byte được đưa lên bởi các sự kiện và thuộc tính linh tinh không liên quan. – Gabe

+0

Đó chính là điểm. Trong Winforms, ngay cả với rất nhiều chi phí - hwnd, sự kiện, tài sản (một số không bao giờ được giao) - việc sử dụng bộ nhớ không bao giờ là một vấn đề. Nếu nó thực sự là một vấn đề, sau đó thiết kế này ủng hộ dep. chống đỡ. có thể đã được triển khai ở đó. Tôi thấy rằng lợi ích không gian bộ nhớ hiệu quả này được trích dẫn trong nhiều sách, bài viết nhưng nó giải quyết một vấn đề không thực sự tồn tại hoặc không quan trọng. Tôi tin rằng ngay cả khi đây là một trong những lợi ích của dep. tài sản đó phải là tài sản ít quan trọng nhất. – thewpfguy

0

MSDN cung cấp một định nghĩa tốt, mô tả và các ví dụ

Đối với hiểu biết sâu sắc hơn về DependencyProperty kiểm tra here

2

"mang đến cho bạn một loạt các cơ sở hạ tầng để làm tất cả những điều mà bạn thường muốn làm gì với một bình thường tài sản - xác thực nó, ép buộc nó vào một phạm vi thích hợp, đưa ra các thông báo thay đổi và một số khía cạnh khác. "

WPF Tutorial - Introduction To Dependency Properties

+0

Xác thực, ép buộc và thay đổi thông báo là tất cả có thể với các thuộc tính CLR thông thường cũng như – gn22

+0

Cảm ơn bạn đã chia sẻ liên kết, cá nhân tôi thấy nó rất hữu ích. –

1

Một tài sản phụ thuộc là một tài sản được hỗ trợ bởi hệ thống sở hữu WPF thay vì bởi một lĩnh vực trong lớp tuyên bố.

Tầm quan trọng của điều này là vì WPF sở hữu thuộc tính, WPF có thể xem xét các yếu tố khác nhau khi tính giá trị thuộc tính - chẳng hạn như hình động, kiểu và ràng buộc dữ liệu. Một hệ quả khác là bởi vì các thuộc tính được quản lý bởi WPF, chúng không phải được khai báo trên các lớp mà về mặt khái niệm có trạng thái: do đó, các thuộc tính được thu thập, cho phép ví dụ: một Grid để liên kết trạng thái lưới cụ thể với các đối tượng không phải lưới.

(Nhân tiện, tôi đã đề cập đến WPF ở trên vì đây là khung chính sử dụng DP, nhưng Windows Workflow Foundation cũng có khái niệm về thuộc tính phụ thuộc. Vì vậy, để sửa đúng DP là tài sản được hỗ trợ bởi một hệ thống thuộc tính bên ngoài, cụ thể là một hệ thống cho phép các yếu tố khác "giá trị thiết lập cuối cùng" đi vào hoạt động khi nhận giá trị tài sản.)

+0

Thông tin bổ sung tốt nhất ở đây cho câu trả lời chấp nhận. – KMC

1

Thuộc tính phụ thuộc là giá trị hiện tại phụ thuộc (như tên) trên các khía cạnh khác như giá trị mặc định, xác thực, ép buộc, thừa kế giá trị hoặc hoạt ảnh.

Ngoài ra, thuộc tính depedency còn hỗ trợ sẵn có cho thông báo thay đổi, ràng buộc dữ liệu và tạo kiểu.

Chúng là gì?

Một loạt các lớp và cách xác định để sử dụng chúng cung cấp chức năng ở trên được sử dụng cho các lớp kế thừa từ DependencyObject.

Chúng không phải là tính năng ngôn ngữ. Chúng là một tính năng của .NET Framework.

+0

cảm ơn. Đẹp nhất. – Freelancer

0

Thuộc tính phụ thuộc phụ thuộc vào nhiều nhà cung cấp để xác định giá trị của nó tại bất kỳ thời điểm nào. Các nhà cung cấp này có thể là một hoạt ảnh liên tục thay đổi giá trị của nó, một phần tử cha có giá trị thuộc tính truyền xuống cho con của nó, v.v.

Có thể cho rằng tính năng lớn nhất của thuộc tính phụ thuộc là khả năng tích hợp sẵn để cung cấp thông báo thay đổi.

Bất cứ khi nào giá trị của thuộc tính phụ thuộc thay đổi, WPF có thể tự động kích hoạt một số hành động, tùy thuộc vào siêu dữ liệu của thuộc tính. Những hành động này có thể được tái render- nhập các yếu tố thích hợp, cập nhật bố cục hiện tại, làm mới các ràng buộc dữ liệu và nhiều hơn nữa. Một trong những tính năng thú vị nhất được kích hoạt bởi thay đổi tích hợp này là notifica- tion là bộ kích hoạt thuộc tính, cho phép bạn thực hiện các hành động tùy chỉnh của riêng mình khi thay đổi giá trị tài sản , mà không cần viết bất kỳ mã thủ tục nào

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