Каковы недостатки создания свойства зависимости? - PullRequest
1 голос
/ 18 декабря 2010

Здесь сказано:

http://msdn.microsoft.com/en-us/library/ms753358.aspx

Иногда типичный метод обеспечения вашей собственности частным полем является адекватным.

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

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

Так что, если я систематически создаю свойство зависимостей, а не просто создаю приватное поле, какие будут недостатки?

Ответы [ 3 ]

3 голосов
/ 18 декабря 2010

На самом деле есть некоторые недостатки:

  • Создание свойства Dependency является более многословным, чем свойство с частным полем.
  • Когда вы используете свойство Dependency, вашеданные хранятся внутри словаря.Это имеет некоторые последствия для производительности: поиск доступа выполняется во время выполнения, также выполняется преобразование, и бокс / распаковка будут происходить, потому что все значения свойств зависимостей хранятся в виде объектов.Кроме того, все эти возможности предоставляются по цене (цене исполнения), которую вы будете платить за каждый доступ (чтение или запись).Событие будет инициировано (как PropertyChanged), проверка будет выполнена в соответствии с вашей конфигурацией DP ...

  • Ваш класс должен наследовать от DependencyObject

Это цена, которую я готов заплатить, когда понадобятся эти возможности.Но они не нужны во многих случаях => Используйте DP, когда это уместно, классическое личное поле в другом месте.

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

1 голос
/ 18 декабря 2010

DP следует использовать только при создании / изменении нового элемента управления WPF.Слишком много служебных данных для использования в качестве свойства на ВМ (и делает ВМ зависимой от WPF).Для обычного использования вы должны реализовать INotifyPropertyChanged

1 голос
/ 18 декабря 2010

Это зависит от того, что вам нужно. Например, если вам нужно связывание, вы ДОЛЖНЫ создать DependencyProperty. Если вам приходится работать с данными, которые не «взаимодействуют» с графическим интерфейсом, использование свойства DependencyProperty бесполезно и менее эффективно, поскольку вам не нужны привязка, анимация и т. Д.

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

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