Я не понимаю различные режимы привязки данных в WPF, например:
- Односторонняя
- двухсторонняя
- Одноразовый
- и т.д...
Что означает каждый из этих режимов?
Когда они должны использоваться?
Я не понимаю различные режимы привязки данных в WPF, например:
Что означает каждый из этих режимов?
Когда они должны использоваться?
OneWay
: Используйте это, когда вы хотите, чтобы связанное свойство обновляло пользовательский интерфейс.TwoWay
: Это то же поведение, что и OneWay
и OneWayToSource
. Связанное свойство обновит пользовательский интерфейс, а изменения в пользовательском интерфейсе будут обновлены связанным свойством (вы использовали бы это с помощью TextBox
или Checkbox
).OneTime
: Это имеет такое же поведение, как OneWay
, за исключением того, что он будет обновлять только один пользовательский интерфейс. Это должен быть ваш выбор по умолчанию для привязки (по разным причинам я не буду здесь останавливаться), вы должны использовать другие типы привязок, если вам действительно нужна дополнительная функциональность.OneWayToSource
: Это противоположно OneWay
- изменения значения пользовательского интерфейса обновляют связанное свойство.Если вы ничего не укажете, поведение будет зависеть от используемого вами элемента управления.
Для получения дополнительной информации см. BindingMode
перечисление на MSDN.
Связывание состоит из двух объектов:
Цель должна быть DependencyObject
(для привязки к работе), а источник может быть либо DependencyObject
, либо должен иметь некоторый механизм для имитации системы привязки WPF об ее изменении (Implemeting INotifyPropetyChnaged
interface).
MVVM рекомендует проекту ViewModel быть свободным от каких-либо Просмотр связанных ссылок, и поэтому рекомендуется использовать интерфейс INotifyPropertyChanged
, чтобы заставить объект Source быть услышанным привязкой WPF.
Связывание происходит между свойством Source и свойством Target (должно быть DependencyProperty
).
например Класс TextProperty
класса TextBox
- это свойство DataBound для (скажем) UserName
модели представления.
Связывание WPF предлагает четыре типа привязки. Помните, что Binding работает в потоке пользовательского интерфейса, если иначе вы не укажете его для запуска в противном случае.
UserName
, оно будет отображаться в текстовом поле. Это средняя цена, поскольку система привязки отслеживает только Источник для изменений.TextProperty
, и UserName
останутся в синхронизации и будут обновлять друг друга, если они будут изменены. Это наиболее дорого, поскольку система привязки должна следить за обеими сторонами за изменениями.TextProperty
, свойство UserName
примет измененное значение. Это опять же связано с промежуточными затратами, поскольку система привязки отслеживает только Target для изменений.Label
, TextBlock
и т.д.Если вы ничего не упоминаете, каждое свойство target имеет режим привязки по умолчанию, связанный с самим собой. Например. TextProperty
для TextBox
имеет режим привязки по умолчанию как TwoWay
. Для TextProperty
a TextBlock
это один из способов.
Желательно, чтобы вы выбрали правильный режим, так как это может помочь вам сократить задержку приложения, особенно в тех случаях, когда в вашем пользовательском интерфейсе имеется большое количество элементов управления.
Подробнее о MVVM здесь - это статья, написанная мной.