Що таке властивість залежності?


Відповіді:


94

Властивості залежності - це властивості класів, що походять від DependencyObject, і вони особливі тим, що замість того, щоб просто використовувати резервне поле для збереження їх значення, вони використовують деякі допоміжні методи на DependencyObject.

Найприємніше в них те, що у них вбудована вся сантехніка для прив’язки даних. Якщо ви щось прив’яжете до них, вони повідомлять про це, коли вони зміняться.


36
Це все ще говорить мені дуже мало про те, що може зробити властивість залежності чи чому вона існує. Ви нічого не згадуєте про їх найціннішу властивість, роздільну здатність значення дерева елементів.
ПрофК

привіт @MattHamilton дякую за вашу відповідь - але що ви маєте на увазі під "вони використовують деякі допоміжні методи на DependencyObject."
BKSpurgeon

2
@BKSpurgeon DependencyObject має деякі методи, такі як "SetValue" та "GetValue", які ви закликаєте зберегти / прочитати значення властивості залежності, а не використовувати поле резервного копіювання.
Метт Гамільтон

91

Єдине пояснення, яке я вважав корисним та добре написаним, це таке: http://www.wpftutorial.net/dependencyproperties.html

В основному, DependencyProperties відрізняються від звичайних властивостей тим, що вони не просто сеттери / getters для полів у класі, але вони отримують свої фактичні значення динамічно під час виконання. TheSetValue()Метод ДПС досить простий і встановлює локальне значення властивості на значення , яке ви дали його. Однак, коли ви спробуєте скористатись GetValue()властивістю DependencyProperty, вона спочатку шукатиме локальне значення, якщо такого немає (що є життєздатним у DependencyProperties на відміну від звичайних властивостей), воно продовжить вгору до логічного дерева інтерфейсу, поки не знайде таке значення. Якщо рамка досягла вершини дерева, не знаходячи локальних значень, то вона буде використовувати заздалегідь задане значення за замовчуванням як значення властивості.

Цей метод дозволяє DependencyProperties споживати менше пам'яті, ніж звичайні властивості, оскільки локально зберігатимуться лише ті значення, які явно встановлені користувачем.

І, як було сказано вище, DependencyProperties також дозволяє нам прив’язати їх до коду XAML і встановити на них тригери, що в регулярних властивостях заборонено.

Я сподіваюся, що мені вдалося вияснити деякі розпливчастість :)


2
А що таке "додане майно"?
Пол-Себастьян Маноле

12
Вкладене властивість - це властивість, яка не належить до поточного елемента, який декларується, але впливає на інший об’єкт. Наприклад: Grid.Row="1"у Buttonзаповіті буде встановлено, що він знаходиться у рядку №2 на батьківському Grid(через те, що рядки базуються на нулі), але Rowвластивість DependencyProperty належить Gridоб'єкту.
Джонатан Перрі

2
Коли ви сказали DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed, чи мали на увазі і прив'язку в XAML, і встановлення тригерів, або просто встановлення тригерів, заборонено. Дякуємо за подальші дії та допомагаєте зробити речі зрозумілішими!
Пол-Себастьян Маноле

@ Paul-SebastianManole DataTriggers також працює над регулярними властивостями. Скажімо, у вас є Valueвластивість (не DP) зі значенням 0, і ви хочете, щоб ваш погляд щось робив при Valueзміні на 1. Ви зможете це зробити, використовуючи DataTriggerта встановившиBinding={Binding Path=Value, Value=1}
Джонатан Перрі

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ дає чітке пояснення властивостей залежності як у контексті WF, так і WPF.

Уривок:

Ключовий момент - значення властивостей залежностей вирішено

Кінцевою метою властивості залежності, як і будь-якої властивості, є управління станом. Але на відміну від звичайних властивостей .Net, значення локальної властивості не зберігається в змінній примірника.

Натомість властивості залежності реєструються в рамках властивості залежності, і базове значення властивості вирішується, тобто значення визначається рамкою властивостей залежності залежно від правил, визначених реєстрацією властивості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.