MSDN says,Работает ли привязка только с DependencyProperty?
Каждое связывание обычно имеет эти четыре компоненты: связывания целевого объекта , целевое свойство, связывающий источник, и путь к значению в связывания источника для использования. Например, если вы хотите связать содержимое TextBox на имя свойства объекта Сотрудника, ваш целевой объект текстовое поле, цель свойство Текст свойство, значение для использования в Имя, а исходным объектом является объект Employee.
Объект target должен быть зависимым.
выше отрывок объясняет, почему следующий код работает,
<TextBox Text="{Binding EmployeeName}">
Это работает, потому что Text свойство зависимостей. До этого момента все в порядке!
Мой вопрос,
IF свойство цели должно быть свойство зависимости для Binding работать, то, как делает folllowing сеттер работу? Обратите внимание, что Значение в Setter НЕ является зависимым имуществом!
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding EmployeeName}"/>
</Style>
Я объяснение этого. Но я не уверен, что это правильно. Позвольте мне сначала объяснить это, а затем, вы, ребята, меня исправите, если я ошибаюсь. :-)
Я думаю, что, так как типа из Значение является Object, что означает, что он может содержать экземпляры любого типа. Он может содержать экземпляр типа «Тип привязки». Он, однако, не может участвовать в процессе оценки (или разрешения) выражения Binding, поскольку он не является свойством зависимостей. Таким образом, объект Style просто переносит этот объект привязки (которое имеет значение) из Setter в TextBox как таковой, не оценивая/не изменяя значение привязки. Как таковой выше сеттер становится эквивалентно следующему:
Text="{Binding EmployeeName}"
И так как теперь, Text является свойством зависимости, он может разрешить Binding значение. Итак, сначала кажется, что целью привязки является значение, но на самом деле текст является объектом привязки.
Это как сеттер почтальон, сама ценность - это почта почтальона, обязательный экземпляр (т. Е. Какое значение имеет значение) - это письмо. Почтальон (т. Е. Сеттер) доставляет письмо (например, экземпляр привязки) к объекту Target (т.е. свойство Text), не открывая его, i.e, не зная, какое сообщение (т.е. EmployeeName) несет письмо.
Пожалуйста, исправьте меня, если я ошибаюсь.
Действительно ли это работает? Я попытался сделать что-то подобное с стилями TreeViewItem, но это не так. – 2010-11-30 17:51:40
В Silverlight я имею в виду. WPF поддерживает привязки определений в стилях. – 2010-11-30 17:52:17
@Lex Lavnikov .... Недавно я не проверял себя в Silverlight, я не помню, использовал ли я привязку в стиле Silverlight. Во всяком случае, вы можете начать другой поток, чтобы обсудить это. Что ты говоришь? – Nawaz 2010-11-30 18:23:06