Ответы:
Свойства зависимости - это свойства классов, которые являются производными от DependencyObject, и они отличаются тем, что вместо того, чтобы просто использовать вспомогательное поле для хранения своего значения, они используют некоторые вспомогательные методы в DependencyObject.
Самое приятное в них - это то, что у них есть все встроенные средства для привязки данных. Если вы связываете что-то с ними, они уведомят об этом, когда изменятся.
Единственное объяснение, которое я нашел полезным и хорошо написанным, это: http://www.wpftutorial.net/dependencyproperties.html
По сути, свойства DependencyProperties отличаются от обычных свойств тем, что они не просто устанавливают / получают для полей в классе, но динамически извлекают их действительные значения во время выполнения. SetValue()
Метод дпс довольно прост и устанавливает локальное значение свойства на значение , которое вы дали его. Однако, когда вы пытаетесь получить GetValue()
из DependencyProperty, он сначала будет искать локальное значение, если его нет (что жизнеспособно в DependencyProperties в отличие от обычных свойств), он продолжит вверх по дереву логического интерфейса, пока не найдет такое значение. Если платформа достигла вершины дерева, не найдя никаких локальных значений, она будет использовать предопределенное значение по умолчанию в качестве значения свойства.
Этот метод позволяет DependencyProperties использовать меньше памяти, чем обычные свойства, поскольку только значения, которые были явно установлены пользователем, будут храниться локально.
И, как уже упоминалось выше, DependencyProperties также позволяют нам связываться с ними в коде XAML и устанавливать на них триггеры, что в обычных свойствах запрещено.
Надеюсь, мне удалось избавиться от некоторой неопределенности :)
Grid.Row="1"
при Button
желании он будет находиться в строке № 2 родительского элемента Grid
(из-за того, что строки начинаются с нуля), но Row
свойство DependencyProperty принадлежит Grid
объекту.
DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed
, вы имели в виду, что связывание в XAML и установка триггеров или просто установка триггеров недопустимы. Спасибо за продолжение и помогаем прояснить ситуацию!
Value
свойство (не DP) со значением 0, и вы хотите, чтобы ваш взгляд что-то делал при Value
изменении на 1. Вы сможете сделать это, используя DataTrigger
и установивBinding={Binding Path=Value, Value=1}
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ дает хорошее объяснение свойств зависимостей как в контексте WF, так и WPF.
Выдержка:
Ключевой момент - значение свойств зависимости разрешено
Конечная цель свойства зависимости, как и любого свойства, состоит в управлении состоянием. Но в отличие от обычных свойств .Net, значение локального свойства не сохраняется в переменной экземпляра.
Вместо этого свойства зависимостей регистрируются в структуре свойств зависимостей, и значение базового свойства разрешается - это означает, что значение определяется структурой свойств зависимостей на основе правил, определенных регистрацией свойств.