Нужно краткое и четкое определение для «Свойства зависимости» - PullRequest
17 голосов
/ 24 марта 2010

Я пытаюсь выяснить, что именно являются свойствами зависимости, но когда я где-то ищу определение, я нахожу только «как использовать», но не «что это такое». Представьте, что вас спрашивают на собеседовании - что такое свойство зависимости. Каков будет ваш ответ?

Ответы [ 6 ]

17 голосов
/ 24 марта 2010

DependencyProperty - это свойство, значение которого зависит (или может зависеть) от какого-либо другого источника (такого как анимация, привязка данных, стили или наследование визуального дерева). Значение обычного свойства хранится в объекте, к которому оно принадлежит, в то время как вы можете думать о свойстве зависимости как о сохранении где-то в базе данных. Эта база данных по существу состоит из словаря, который сопоставляет пары (объект, свойство) с их значениями, а также сопоставление свойств которых зависит от других свойств (например, когда вы изменяете DataContext панели, он может уведомить всех детей внутри панели).

Так почему же они хранят значения свойств в какой-то магической базе данных? Есть несколько причин:

  • Уменьшает место для хранения. Добавление свойства (даже если его значение равно нулю) в класс добавляет 4 байта (8 для 64-разрядного процесса) пространства каждому экземпляру класса. DependencyProperty занимает место только тогда, когда экземпляр имеет значение. Например, FrameworkElement имеет десятки свойств зависимостей, большинству из которых никогда не присваиваются значения. Если бы все эти свойства были сохранены в классе, каждый экземпляр был бы сотнями байтов. Вместо этого каждый экземпляр занимает всего около 40 байтов.

  • Включает прикрепленные свойства. Такие свойства, как Canvas.Left и Grid.Row должны храниться на объектах, которые никогда не слышали о Canvas или Grid, так где вы их разместите? Вы помещаете их в базу данных где-то.

  • Включает автоматическое изменение свойств. Представьте, как бы вы реализовали что-то вроде стилей или наследования свойств (возможность установить что-то вроде шрифта или контекста данных в родительском элементе и распространить его значение на все дочерние элементы). Хранение всего этого в базе данных позволяет сделать так, чтобы код находился в одном месте, а не реализовывался отдельно для каждого объекта и свойства, в которых он нуждается.

2 голосов
/ 24 марта 2010

«предоставляет вам кучу инфраструктуры для того, чтобы делать все то, что вы часто хотите делать с обычным свойством - проверять его, приводить в надлежащий диапазон, выдавать уведомления об изменениях и ряд других аспектов».

Учебник WPF - Введение в свойства зависимостей

1 голос
/ 24 марта 2010

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

Также свойство зависимости имеет встроенную поддержку уведомлений об изменениях, привязки данных и стиля.

Что это?

Группа классов и определенные способы их использования, обеспечивающие вышеуказанную функциональность для классов, наследуемых от DependencyObject.

Они не являются языковой функцией. Они являются функцией .NET Framework.

1 голос
/ 24 марта 2010

Свойство зависимости - это свойство, которое поддерживается системой свойств WPF, а не полем в объявленном классе.

Значение этого заключается в том, что, поскольку WPF владеет свойством, WPF может учитывать различные факторы при расчете значения свойства, такие как анимация, стили и привязки данных. Другое следствие состоит в том, что поскольку свойства управляются WPF, их не нужно объявлять в классах, которые концептуально имеют состояние: следовательно, привязанные свойства, которые позволяют, например, сетка для связывания специфичного для сетки состояния с не-сеточными объектами.

(Кстати, я упомянул WPF выше, потому что это основная структура, использующая DP, но Windows Workflow Foundation также имеет понятие свойств зависимостей. Поэтому, чтобы быть строго правильным, DP - это свойство, которое поддерживается внешняя система свойств, в частности та, которая позволяет другим факторам, кроме «последнего заданного значения», вступать в игру при получении значения свойства.)

0 голосов
/ 19 января 2013

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

Возможно, самой большой особенностью свойства зависимостей является его встроенная возможность предоставлять уведомления об изменениях.

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

0 голосов
/ 24 марта 2010

MSDN дает хорошее определение, описание и примеры

Для более глубокого понимания проверки DependencyProperty здесь

...