Что такое свойство зависимости? - PullRequest
129 голосов
/ 06 марта 2009

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

Ответы [ 4 ]

91 голосов
/ 06 марта 2009

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

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

88 голосов
/ 16 октября 2012

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

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

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

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

Надеюсь, мне удалось избавиться от некоторой неопределенности :)

36 голосов
/ 06 марта 2009

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

Выдержка:

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

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

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

8 голосов
/ 20 июня 2017

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

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

Думайте об этом так:

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

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

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

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

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

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

Мы хотим быть в состоянии дать прямые ответы людям, которые спрашивают нас о себе.

  • Минимизировать объем памяти

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

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

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

  • одно сердце

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

  • три гена BRCA2

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

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

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

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

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

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

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

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

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

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

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

Другая особенность свойств зависимости: значения, зависящие от других значений

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

Резюме

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...