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

Что такое свойство зависимостей в .Net(особенно в контексте WPF). В чем отличие от обычного свойства?

Ответ 1

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

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

Ответ 2

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

В основном, DependencyProperties отличаются от обычных свойств тем, что они не просто сеттеры/получатели для полей в классе, но они динамически извлекают свои фактические значения во время выполнения. Метод SetValue() для DP очень прост и устанавливает локальное значение свойства в значение, которое вы ему дали. Однако, когда вы пытаетесь выполнить GetValue() из DependencyProperty, сначала будет искать локальное значение, если оно отсутствует (что является жизнеспособным в DependencyProperties, в отличие от обычных свойств), оно продолжит логическое дерево пользовательского интерфейса, пока оно не найдет такое значение, Если структура достигла вершины дерева без нахождения каких-либо локальных значений, в качестве значения свойства будет использоваться предопределенное значение по умолчанию.

Этот метод позволяет DependencyProperties потреблять меньше памяти, чем обычные, поскольку только значения, которые явно заданы пользователем, будут храниться локально.

И, как уже упоминалось выше, DependencyProperties также позволяют нам связываться с ними в коде XAML и устанавливать на них триггеры, которые по регулярным свойствам не разрешены.

Надеюсь, мне удалось устранить некоторые неопределенности:)

Ответ 3

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ дает хорошее объяснение свойств зависимостей как в контексте WF, так и в WPF.

Выдержка:

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

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

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

Ответ 4

Пояснение без кода по аналогии (~ 5 мин)

Если вам не нравятся истории, то сохраните себя (~ 5 минут)

Нам придется пройти через несколько концепций:

  • Значение Разрешение Вверх по дереву/Свойство Значение Наследование и
  • Поддержка нескольких провайдеров
  • Уведомления об изменениях

(а) Значение разрешения/наследование значения свойства

Позвольте использовать пример человеческих генов, чтобы объяснить концепцию.

Все более или менее одинаковы

У людей есть много информации, связанной с ними. Бесчисленные сотни и тысячи данных связаны с вами -

  • сколько у тебя пальцев,

  • сколько пальцев,

  • сколько у вас генов BRCA2 и т.д.

Какую проблему мы хотим решить?

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

Итак, вопрос: как вы можете вспомнить все это? Ну, изначально люди начали записывать все эти вещи, но вскоре они поняли, что им нужно будет нести около 10 томов желтых страниц - в основном всю библиотеку Александрии (в печатном виде) в своем заднем кармане, чтобы иметь возможность ответь на все эти вопросы: вот слишком много вещей, чтобы тащить с собой.

Решение: хранить общую информацию в одном месте

Так что у кого-то была блестящая идея. Они заметили, что большую часть времени информация одинакова. Например, большинство людей имеют:

  • одно сердце

  • одно лицо и т.д.

  • три гена BRCA2

Нет необходимости, чтобы каждый человек нес около 30 фунтов бумаги в заднем кармане. Вы можете хранить всю эту информацию в одном месте, в одной центральной библиотеке. Люди могут свободно ходить, не обременяя себя тем, что несут эту информацию.

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

Пример: репортер берет интервью у президента Дональда Трампа **

Давайте попробуем это на примере.

У нас есть экземпляр Person: Дональд Трамп. Репортер новостей задает нашему уважаемому Президенту несколько вопросов:

"Господин президент Трамп, сколько у вас генов HIF1A?"

Дон проверяет свой задний карман. Там ничего не перечислено там о том, сколько генов у него есть. Поэтому он просто говорит репортеру, что у него есть номер по умолчанию, который есть у всех остальных. "Так же, как и все", - говорит Трамп. "Вы можете найти свой ответ в библиотеке". Таким образом, репортер просто идет в библиотеку, чтобы узнать об этой конкретной детали.

"Господин президент Трамп, сколько у вас лиц?

Может ли это значение быть разрешено локально? Похоже, это значение разрешается локально, потому что в заднем кармане Трампа лежит ответ: 2 - который быстро возвращается репортеру.

Значение разрешения вверх по дереву

В действительности все немного сложнее, чем ответ: либо он находится в заднем кармане, либо хранится в центральной библиотеке. Существует много промежуточных мест, в которых может храниться одна и та же информация, и, таким образом, они будут идеальными кандидатами для "определения стоимости имущества". Таким образом, все может начаться в заднем кармане, тогда репортеру, возможно, придется проверить целую кучу промежуточных мест в порядке возрастания, чтобы получить ответ. например, репортер может начать с других газет, затем с судебных документов и, если все это не получится, если ответа не найдено, тогда ответом является значение по умолчанию, содержащееся в центральной библиотеке.

Чтобы упростить это, все решается сначала с человеком, а затем с высшими и высшими авторитетами: в конечном итоге, в зависимости от обстоятельств, появляется либо Бог, либо монстр-спагетти. В конце концов, вы продолжаете идти все выше и выше, пока не получите ответ. В конце концов, все ответы будут решены.

Резюме

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

Наконец, вы получаете автоматическое уведомление об изменениях, встроенное бесплатно.

Конечно, аналогия немного натянута, но я надеюсь, что это полезно.

** Все еще жду (огненную) стену, обещанную Трампом. Нужно не пускать спамцев.