Каковы различные режимы привязки WPF?

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

  • Одностороннее движение
  • Двусторонний
  • Один раз
  • и т.д…

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

Когда их следует использовать?

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

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

Для получения дополнительной информации см. BindingMode в MSDN .

Связывание состоит из двух объектов:

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

objective должна быть DependencyObject (для привязки к работе), а источник может быть либо DependencyObject либо должен иметь некоторый механизм для имитации системы привязки WPF об ее изменении (Implemeting INotifyPropetyCnaged interface).


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

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

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

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

Для получения дополнительной информации о MVVM приведена статья, написанная мной.

  • Заполнить Combobox из базы данных
  • ItemsControl с несколькими DataTemplates для viewmodel
  • Должен ли я привязываться к ICollectionView или ObservableCollection
  • Привязка данных Android с использованием тега include
  • Можно ли связать свойство Canvas's Children в XAML?
  • Image UriSource и привязка данных
  • Управление несколькими выборами с помощью MVVM
  • Как правильно привязать xml к WPF DataGrid?
  • Как обнаружить сломанные привязки данных WPF?
  • Обнаружение ошибок проверки WPF
  • Перетаскивание из источника данных в окно WPF не работает
  • Давайте будем гением компьютера.