Как на самом деле работает привязка? - PullRequest
12 голосов
/ 07 ноября 2010

Я изучаю WPF уже несколько месяцев, и мне интересно одно.Как на самом деле работает привязка?Я имею в виду, что происходит под капотом.Я не ожидаю, что кто-нибудь здесь даст подробное объяснение, но, возможно, хороший ресурс или ссылку, где можно прочитать что-то вроде этого.Я искал и гуглял по этому поводу, но пока не нашел хороших хитов.

Я понимаю, что для полного понимания этого вам, вероятно, придется понимать большинство частей фреймворка, но немного базового понимания было бы замечательно.

Ответы [ 3 ]

6 голосов
/ 08 ноября 2010

При связывании необходимо учитывать два аспекта: получение значений в пользовательском интерфейсе и уведомление пользователя об изменениях в его DataContext.

По сути, вы можете привязать практически все к любому объекту POCO, объект делаетНе нужно ничего особенного реализовывать.Ограничением для простых объектов является то, что цель связывания не будет сообщена при изменении базового значения.

Изменения свойств распространяются через один из трех механизмов:

Свойства зависимости: уведомит систему привязки, когдаизменения его значения также могут использоваться для анимации.

INotifyPropertyChanged: если привязка выполняется к свойству объекта, который реализует INotifyPropertyChanged, система привязки будет искать подписку на событие PropertyChanged и обновлять цель привязки,при возникновении этого события имена свойств отправляются в виде строк.

* Свойство * Измененные события: Последнее, что будет искать привязка, - это событие с именем, совпадающим с исходным свойствоми изменено в конце, поэтому свойство Name должно иметь открытое событие NameChanged, что позволяет WPF связываться со старыми классами .net, такими как 1.1.

3 голосов
/ 07 ноября 2010

Я не очень разбираюсь в особенностях связывания в WPF, но если тот же принцип применяется для связывания в System.ComponentModel и Windows Forms, то статья в блоге, которую я недавно написал, может помочь пролить свет на это для вас. :

Некоторые сведения о привязке данных Windows Forms

В основном, источники привязки должны реализовывать IList, IListSource, ITypedList или IBindingList. Через рефлексию или явное определение источники данных выставляют PropertyDescriptor объекты, которые описывают их привязываемые свойства. Имена этих свойств (которые могут быть или не быть именами фактических свойств объектов, содержащихся в источнике данных - например, в DataTable, они вместо имен столбцов) сопоставляются со свойством DisplayMember / ValueMember или, в случае WPF, путь привязки.

0 голосов
/ 07 ноября 2010

Это довольно сложный вопрос.Я считаю, что есть примерно два аспекта ответа.Первый документация.Если вы изучите всю документацию по выражениям привязки, включая способы построения путей и, например, вспомогательные классы, такие как BindingOperations, вы сможете многое узнать.Если этого недостаточно, вы всегда можете погрузиться в код, загрузив его с сайта Microsoft Source Initiative .

...