Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Выдержка:

  

Ключевой момент & # 8211; Значение свойств зависимости разрешено

     

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

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

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

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

Нам нужно будет рассмотреть несколько концепций:

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

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

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

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

С людьми связано много информации.С вами связано бесчисленное количество сотен и тысяч данных –

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

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

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

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

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

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

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

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

  • одно сердце

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

  • три гена BRCA2

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

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

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

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

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

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

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

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

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

Разрешение значений по дереву

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

Проще говоря, все решается сначала с самим человеком, а затем по восходящей все более и более высоким инстанциям:в конечном итоге вы попадаете либо к Богу, либо к Макаронному монстру, в зависимости от обстоятельств.В конце концов, вы продолжаете подниматься все выше и выше, пока не получите ответ.В конце концов, все ответы будут разрешены.

Краткие сведения

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

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

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

** Все еще ждем обещанной Трампом (пожарной) стены.Нужно уберечься от спам-рассылки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top