MSDN говорит:
Каждая привязка обычно имеет следующие четыре компонента: целевой объект привязки, целевое свойство, источник привязки иПуть к значению в источнике привязки для использования.Например, если вы хотите связать содержимое TextBox со свойством Name объекта Employee, вашим целевым объектом является TextBox, , целевым свойством является свойство Text , используемым значением будет Name,а исходным объектом является объект Employee.
Целевое свойство должно быть свойством зависимости.
Вышеприведенный отрывок объясняет, почему работает следующий код:
<TextBox Text="{Binding EmployeeName}">
Он работает, потому что Text является свойством зависимости.До этого момента все было хорошо!
Мой вопрос:
Если целевое свойство должно быть свойством зависимости, чтобы Binding работало, тогда как работаетследующие сеттер работают?Обратите внимание, что Значение в Setter НЕ является свойством зависимости!
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding EmployeeName}"/>
</Style>
У меня есть объяснение этому.Но я не уверен, что это правильно.Позвольте мне сначала объяснить это, а затем, ребята, поправьте меня, если я ошибаюсь.: -)
Я думаю, поскольку тип из Значение равно Объект , то есть он может содержать экземпляры ЛЮБОГО типа.Он может содержать экземпляр даже типа Binding. Однако он не может участвовать в процессе оценки (или разрешения) выражения Binding, поскольку это не свойство зависимости. Таким образом, объект Style просто передает этот объект Binding (который содержит Value) из Setter вTextBox как таковой, без оценки / разрешения значения Binding.Таким образом, вышеуказанный Setter становится эквивалентным этому:
Text="{Binding EmployeeName}"
И, поскольку теперь Text является свойством зависимости, он может разрешать значение Binding. Итак, сначала кажется, что целью привязки является Value, но в действительности Text является целью привязки.
Это похоже на Setter - почтальона, само Value - это Bag почтальона, экземпляр Binding(то есть то, что имеет значение) является буквой.Почтальон (т. Е. Установщик) доставляет письмо (т. Е. Экземпляр привязки) к цели (т. Е. Свойству Text), не открывая ее, т. Е. Не зная, какое сообщение (т. Е. EmployeeName) несет в себе письмо.я не прав.