Каковы различные режимы привязки WPF?
Я не понимаю различные режимы привязки данных в WPF, такие как:
- Одностороннее движение
- Двусторонний
- Один раз
- и т.д…
Что означает каждый из этих режимов?
Когда их следует использовать?
- WPF: привязка ContextMenu к команде MVVM
- WPF привязка данных к интерфейсу, а не к фактическому объекту - возможность литья?
- WPF перед записью
- Общий class наблюдаемого словаря для DataBinding / WPF C #
- Обход проблемы из-за отсутствия оператора 'nameof' в C # для безопасного хранения данных по типу?
- Почему привязка данных WPF к исключению ласточки?
- WPF MVVM INotifyPropertyChanged Implementation - модель или ViewModel
- Как я могу привязать данные строк к ListBox в WPF / WP7?
- Похоже, что привязки данных не обновляются
- WPF привязка к локальной переменной
- ElementName привязка из MenuItem в ContextMenu
- Когда следует использовать # и = в элементах управления ASP.NET?
- Нажатие свойств GUI только для чтения обратно в ViewModel
-
OneWay
: используйте это, когда вы хотите, чтобы связанное свойство обновляло пользовательский интерфейс. -
TwoWay
: Это имеет то же поведение, что иOneWay
иOneWayToSource
. Связанное свойство обновит пользовательский интерфейс, а изменения в пользовательском интерфейсе будут обновлять связанное свойство (вы использовали бы это с помощьюTextBox
илиCheckbox
например.) -
OneTime
: это то же поведение, что иOneWay
за исключением того, что он будет только обновлять пользовательский интерфейс один раз. Это должен быть ваш выбор по умолчанию для привязки (по разным причинам я не буду здесь останавливаться), вы должны использовать другие типы привязок, если вам действительно нужна дополнительная функциональность. -
OneWayToSource
: это противоположностьOneWay
– изменения значения пользовательского интерфейса обновляют связанное свойство.
Если вы ничего не укажете, поведение будет зависеть от используемого вами элемента управления.
Для получения дополнительной информации см. BindingMode
в MSDN .
Связывание состоит из двух объектов:
- Источник (как правило, ViewModel в сценариях MVVM)
- objective (элемент управления пользовательского интерфейса)
objective должна быть DependencyObject
(для привязки к работе), а источник может быть либо DependencyObject
либо должен иметь некоторый механизм для имитации системы привязки WPF об ее изменении (Implemeting INotifyPropetyCnaged interface).
MVVM рекомендует проекту ViewModel быть свободным от каких-либо представлений, связанных со ссылками, и поэтому рекомендуется использовать интерфейс INotifyPropertyChanged
чтобы заставить объект Source быть услышанным привязкой WPF. Связывание происходит между свойством Source и свойством Target (должно быть DependencyProperty
). например, TextProperty
classа TextBox
является DataBound для (скажем) свойства UserName
модели представления. Связывание WPF предлагает четыре типа привязки. Помните, что привязка выполняется в streamе пользовательского интерфейса, если в противном случае вы не укажете его для запуска в противном случае.
- OneWay : свойство target будет прослушивать измененное свойство источника и будет обновляться. Если вы программно измените свойство
UserName
в ViewwModel, оно будет отображаться в текстовом поле. Это промежуточная стоимость, поскольку система привязки следит только за источником изменений. - TwoWay : свойство target будет прослушивать измененное свойство источника и будет обновляться. И свойство source будет прослушивать измененное целевое свойство и будет обновляться. И
TextProperty
и свойствоUserName
будут оставаться в синхронизации и будут обновлять друг друга, если они будут изменены. Это наиболее дорого, поскольку система привязки должна следить за обеими сторонами за изменениями. - OneWayToSource : свойство Source изменится, если свойство target будет изменено. Если пользователь меняет
TextProperty
, свойствоUserName
будет принимать измененное значение. Это снова имеет промежуточную стоимость, поскольку система привязки следит только за изменениями. - OneTime : Это происходит только один раз в течение жизни Binding, свойство Target будет обновляться с помощью свойства Source, когда происходит Binding. Это наименее дорогостоящее и рекомендуется для сценариев, в которых у вас есть статические данные, которые будут отображаться, например,
Label
,TextBlock
и т. Д.
Если вы ничего не упоминаете, каждое свойство target имеет режим привязки по умолчанию, связанный с самим собой. Например, TextProperty
TextBox
имеет режим привязки по умолчанию как TwoWay
. Для TextProperty
TextBlock
это один из способов.
Желательно, чтобы вы выбрали правильный режим, так как это может помочь вам сократить время ожидания приложения, особенно в тех случаях, когда в вашем пользовательском интерфейсе имеется большое количество элементов управления.
Для получения дополнительной информации о MVVM приведена статья, написанная мной.