Я не розумію різні режими прив'язки даних у WPF, такі як:
- Односторонній
- Двосторонній
- Одного разу
- тощо ...
Що означає кожен із цих режимів?
Коли їх слід застосовувати?
Відповіді:
OneWay
: Використовуйте це, коли ви хочете, щоб пов'язане властивість оновлювало інтерфейс користувача.TwoWay
: Це має таку ж поведінку, як OneWay
і в OneWayToSource
поєднанні. Властивість bound оновить користувальницький інтерфейс, а зміни в користувацькому інтерфейсі оновлять пов’язану властивість (Ви могли б використовувати це з прикладом TextBox
або a Checkbox
).OneTime
: Це має таку ж поведінку, OneWay
що і лише за одноразового оновлення користувальницького інтерфейсу. Це має бути вашим вибором за замовчуванням для прив'язки (з різних причин, про які я тут більше не писатиму), ви повинні використовувати інші типи прив'язок, лише якщо вам насправді потрібна додаткова функціональність.OneWayToSource
: Це протилежне OneWay
змінам значення користувальницького інтерфейсу, оновлюючим властивість.Якщо ви нічого не вказали, поведінка буде залежати від елемента керування, який ви використовуєте.
Для отримання додаткової інформації див. BindingMode
Enum на MSDN .
Прив'язка складається з двох сутностей:
Ціль має бути a DependencyObject
(для прив'язки до роботи), а джерелом може бути або a, DependencyObject
або він повинен мати якийсь механізм імітації системи прив'язки WPF щодо її зміни (реалізація INotifyPropetyChnaged
інтерфейсу).
MVVM рекомендує, щоб проект ViewModel був вільний від будь-яких посилань, пов’язаних із View, і тому рекомендується використовувати INotifyPropertyChanged
інтерфейс, щоб зробити об’єкт Source чутим за допомогою прив’язки WPF. Прив'язка відбувається між властивістю Source та властивістю Target (має бути a DependencyProperty
). наприклад, TextProperty
з TextBox
класу DataBound в (скажімо) UserName
властивість моделі уявлення. WPF палітурка пропонує чотири типи палітурки. Пам'ятайте, прив'язка виконується на потоці інтерфейсу користувача, якщо не вказано інше, щоб вона працювала інакше.
UserName
, це відобразиться у текстовому полі. Це є проміжною вартістю, оскільки система прив’язки стежить лише за джерелом змін.TextProperty
і UserName
властивість залишатимуться синхронізованими та оновлюватимуть одне одне, якщо одне зміниться. Це найдорожче, оскільки система зв’язування повинна стежити за змінами обох сторін.TextProperty
, UserName
властивість прийме змінене значення. Це знову є проміжною вартістю, оскільки система прив’язки стежить лише за ціллю змін.Label
, і TextBlock
т.д.Якщо ви нічого не згадуєте, кожна цільова властивість має режим прив'язки за замовчуванням, пов'язаний із собою. Наприклад, TextProperty
a TextBox
має режим прив'язки за замовчуванням як TwoWay
. Для TextProperty
a TextBlock
це один із шляхів.
Бажано вибрати правильний режим, оскільки це може допомогти зменшити затримку програми, особливо у випадках, коли у вас є велика кількість елементів керування в інтерфейсі користувача.
Докладніше про MVVM - ось стаття, написана мною.