Я не понимаю различных режимов привязки данных в WPF, таких как:
- Одностороннее движение
- Двусторонний
- Один раз
- так далее...
Что означает каждый из этих режимов?
Когда их следует использовать?
Ответы:
OneWay: Используйте это, если вы хотите, чтобы привязанное свойство обновляло пользовательский интерфейс.TwoWay: Имеет такое же поведение, как OneWayи в OneWayToSourceсочетании. Связанное свойство обновит пользовательский интерфейс, а изменения в пользовательском интерфейсе обновят привязанное свойство (например, вы можете использовать это с a TextBoxили a Checkbox).OneTime: Имеет такое же поведение, OneWayза исключением того, что пользовательский интерфейс обновляется только один раз. Это должно быть вашим выбором по умолчанию для привязки (по разным причинам я не буду здесь подробно останавливаться), вам следует использовать другие типы привязок, только если вам действительно нужны дополнительные функции.OneWayToSource: Это противоположно OneWay- изменение значения пользовательского интерфейса обновляет привязанное свойство.Если вы ничего не укажете, поведение будет зависеть от элемента управления, который вы используете.
Для получения дополнительной информации см. BindingModeEnum в 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 можно прочитать в статье, написанной мной.