Какие существуют режимы привязки WPF? - PullRequest
66 голосов
/ 21 февраля 2010

Я не понимаю различных режимов привязки данных в WPF, таких как:

  • Односторонний
  • Двусторонний
  • Однократный
  • и т.д ...

Что означает каждый из этих режимов?

Когда они должны использоваться?

Ответы [ 2 ]

128 голосов
/ 21 февраля 2010
  • OneWay: используйте этот параметр, если вы хотите, чтобы привязанное свойство обновляло интерфейс пользователя.
  • TwoWay: это поведение аналогично OneWay и OneWayToSource вместе взятым. Связанное свойство обновит пользовательский интерфейс, а изменения в пользовательском интерфейсе обновят связанное свойство (вы можете использовать это, например, с TextBox или Checkbox.)
  • OneTime: Это поведение аналогично OneWay, за исключением того, что пользовательский интерфейс обновляется только один раз. Это должно быть вашим выбором по умолчанию для привязки (по разным причинам, я не буду здесь останавливаться), вы должны использовать другие типы привязок, только если вам действительно нужны дополнительные функции.
  • OneWayToSource: это противоположно OneWay - изменения значения пользовательского интерфейса обновляют свойство привязки.

Если вы ничего не укажете, то поведение будет зависеть от используемого вами элемента управления.

Дополнительные сведения см. В перечислении BindingMode на MSDN .

30 голосов
/ 10 августа 2016

Привязка состоит из двух сущностей:

  1. Источник (как правило, ViewModel в сценариях MVVM)
  2. Цель (элемент управления UI)

Цель должна быть DependencyObject (для привязки к работе), а источник может быть либо DependencyObject, либо у него должен быть какой-то механизм для имитации системы привязки WPF об ее изменении (реализация интерфейса INotifyPropetyChnaged). ).


MVVM рекомендует, чтобы проект ViewModel был свободен от любых ссылок, связанных с View, и, следовательно, рекомендуется использовать интерфейс INotifyPropertyChanged, чтобы объект Source был услышан связыванием WPF. Связывание происходит между свойством Source и свойством Target (должно быть DependencyProperty). например TextProperty класса TextBox - это DataBound для (скажем) UserName свойства модели представления. WPF переплет предлагает четыре типа переплета. Помните, что связывание выполняется в потоке пользовательского интерфейса, если не указано иное, чтобы оно выполнялось иначе.

  1. OneWay : целевое свойство будет прослушивать изменяемое свойство источника и обновится само. Если вы программно измените свойство ViewwModel UserName, оно отобразится в текстовом поле. Это промежуточная стоимость, поскольку система привязки отслеживает только изменения Source .
  2. TwoWay : целевое свойство будет прослушивать измененное исходное свойство и обновится само. И Свойство источника будет прослушивать изменяемое целевое свойство и обновится само. И свойство TextProperty, и свойство UserName останутся синхронизированными и обновят друг друга, если они будут изменены. Это наиболее затратно, поскольку система переплета должна следить за изменениями с обеих сторон.
  3. OneWayToSource : свойство Source изменится при изменении свойства target. Если пользователь изменяет TextProperty, свойство UserName примет измененное значение. Это опять-таки имеет промежуточную стоимость, поскольку система привязки отслеживает только изменения Target .
  4. OneTime : это происходит только один раз за время существования привязки, свойство Target будет обновлено со свойством Source , когда произойдет привязка. Это наименее затратно и рекомендуется для сценариев, в которых у вас есть статические данные для отображения, например Label, TextBlock и т. Д.

Если вы ничего не упоминаете, каждое свойство target имеет режим привязки по умолчанию, связанный с самим собой. Например. TextProperty из TextBox имеет режим связывания по умолчанию как TwoWay. Для TextProperty из TextBlock это один из способов.

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

Подробнее о MVVM здесь - статья, написанная мной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...