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