Что такое свойство зависимости?


Ответы:


94

Свойства зависимости - это свойства классов, которые являются производными от DependencyObject, и они отличаются тем, что вместо того, чтобы просто использовать вспомогательное поле для хранения своего значения, они используют некоторые вспомогательные методы в DependencyObject.

Самое приятное в них - это то, что у них есть все встроенные средства для привязки данных. Если вы связываете что-то с ними, они уведомят об этом, когда изменятся.


36
Это все еще очень мало говорит мне о том, что может сделать свойство зависимостей или почему оно существует. Вы ничего не упомянули об их наиболее ценном свойстве, разрешающей способности по дереву элементов.
ProfK

Привет @MattHamilton спасибо за ваш ответ - но что вы подразумеваете под "они используют некоторые вспомогательные методы на DependencyObject."?
BKSpurgeon

2
@BKSpurgeon DependencyObject имеет несколько методов, таких как «SetValue» и «GetValue», которые вы вызываете для сохранения / чтения значения свойства зависимости, а не с использованием вспомогательного поля.
Мэтт Гамильтон

91

Единственное объяснение, которое я нашел полезным и хорошо написанным, это: http://www.wpftutorial.net/dependencyproperties.html

По сути, свойства DependencyProperties отличаются от обычных свойств тем, что они не просто устанавливают / получают для полей в классе, но динамически извлекают их действительные значения во время выполнения. SetValue()Метод дпс довольно прост и устанавливает локальное значение свойства на значение , которое вы дали его. Однако, когда вы пытаетесь получить 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}
Jonathan Perry

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.