Подтвердить что ты не робот

В чем разница между свойством Property и Dependency Property

Свойства зависимости создаются так же, как свойства.

Является ли свойство зависимостей, используемым только при создании настраиваемого элемента управления?

4b9b3361

Ответ 1

Свойство Dependency является свойством (а не само, но зависит от другого, скажем, свойство XAML Binding), которое регистрирует другое свойство.

Свойство dependecy регистрирует другое свойство привязки в коде позади, регистрируя его. Пример, который используется в моем проекте, выглядит следующим образом:

public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(CustomImagePlaceHolder), new PropertyMetadata(null));

В приведенном выше коде ImageUri является свойством зависимостей, которое регистрирует источник, который определен/объявлен внутри generic.xaml(независимо от того, объявлен ли он, определен или что-либо еще) следующим образом:

..HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
/>

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

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

Мы должны сказать, какой тип свойства зависимостей состоит в том, что в приведенном выше примере Source является типом BitmapImage, поэтому мы определили typeof (BitmapImage).

Теперь владельцем/родителем этого свойства зависимостей является наш customControlClass CustomImagePlaceHolder, и мы снова определили его при регистрации.

Теперь, чтобы установить значение свойства depndency, используя наши свойства, как показано ниже:

public BitmapImage Source
        {
            get
            {

   string strURI = (string)GetValue(CustomImagePlaceHolder.ImageUri);
                return new BitmapImage(new Uri(strURI));
            }
            set
{
SetValue(CustomImagePlaceHolder.ImageUri, value);
 }

        }

Теперь, как это происходит, мы устанавливаем значение из нашего кода позади или xaml в исходное свойство, определенное выше, и заставляем его устанавливать значение свойства dependecy ImageUri, которое inturn устанавливает значение в привязке шаблона Source, поскольку мы зарегистрировали ImageUri как источник, то есть presennt generic.xaml.

Ответ 2

Свойства зависимостей и стандартные свойства совершенно разные.

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

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

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

Ответ 3

Преимущества свойства зависимостей

На самом деле свойство зависимостей имеет множество преимуществ перед обычными свойствами CLR.

  • Значение свойства Наследование: По значению свойства Наследование означает, что значение свойства Dependency может быть переопределено в иерархии таким образом, чтобы значение с наивысшим приоритетом было установлено в конечном счете.
  • Проверка данных:. Мы можем накладывать автоматическую активацию данных при каждом изменении значения свойства.
  • Участие в анимации: Свойство зависимости может анимироваться. У анимации WPF есть много возможностей для изменения значения с интервалом. Определяя свойство зависимостей, вы можете в конечном итоге поддерживать анимацию для этого свойства.
  • Участие в стилях: Стили - это элементы, определяющие элемент управления. Мы можем использовать свойство Style Setters on Dependency.
  • Участие в шаблонах: Шаблоны - это элементы, которые определяют общую структуру элемента. Определив свойство Dependency, мы можем использовать его в шаблонах.
  • DataBinding: Поскольку каждое из свойств Dependency само вызывает INotifyPropertyChanged при изменении значения свойства, DataBinding поддерживается внутри. Чтобы узнать больше о INotifyPropertyChanged, прочитайте.
  • CallBacks:. Вы можете иметь обратные вызовы для свойства зависимостей, так что всякий раз, когда свойство изменяется, возникает обратный вызов.
  • Ресурсы: Свойство Dependency может принимать ресурс. Таким образом, в XAML вы можете определить ресурс для определения свойства Dependency.
  • Обозначения метаданных:. Вы можете определить определенное поведение свойства зависимости с помощью PropertyMetaData. Таким образом, переопределение формы метаданных производного свойства не потребует от вас переопределения или переопределения всего определения свойства.
  • Поддержка конструктора:. Свойство зависимостей получает поддержку от Visual Studio Designer. Вы можете увидеть все свойства зависимостей элемента управления, указанного в окне свойств конструктора.

В этом некоторые из функций поддерживаются только свойством Dependency. Animation, Styles, Templates, значение свойства Inheritance и т.д. можно было использовать только с использованием свойства Dependency. Если в таких случаях вы используете свойство CLR, компилятор будет генерировать ошибку.

пройдите через эти статьи,

http://www.codeproject.com/KB/WPF/BeginWPF4.aspx#diff

и http://www.dotnetfunda.com/articles/article961-wpf-tutorial--dependency-property-.aspx

и http://msdn.microsoft.com/en-us/library/cc221408(VS.95).aspx

Ответ 4

Если вы наберете propdp и нажмите на символ табуляции в редакторе VS, то автоматически созданная документация свойств зависимостей устанавливается как:

//Использование DependencyProperty в качестве хранилища для MyProperty.
Это позволяет создавать анимацию, стиль, привязку и т.д.

Ответ 5

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

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

Если ваше свойство обычно будет источником привязки данных (например, предоставляя текст для TextBlock), я бы рекомендовал использовать стандартное свойство CLR и иметь реализованный класс класса INotifyPropertyChanged.

Далее....

Свойство зависимости предоставляет функциональность, которая расширяет функциональность свойства, а не свойство, которое поддерживается полем. Часто каждая такая функциональность представляет или поддерживает определенную особенность общего набора функций WPF.

Ресурсы

Связывание данных

Стили

Анимации

Метаданные переопределяют

Наследование свойств

http://msdn2.microsoft.com/en-us/library/ms752914.aspx

Надеюсь, что это поможет.