Які існують різні режими прив'язки WPF?


86

Я не розумію різні режими прив'язки даних у WPF, такі як:

  • Односторонній
  • Двосторонній
  • Одного разу
  • тощо ...

Що означає кожен із цих режимів?

Коли їх слід застосовувати?

Відповіді:


159
  • OneWay: Використовуйте це, коли ви хочете, щоб пов'язане властивість оновлювало інтерфейс користувача.
  • TwoWay: Це має таку ж поведінку, як OneWayі в OneWayToSourceпоєднанні. Властивість bound оновить користувальницький інтерфейс, а зміни в користувацькому інтерфейсі оновлять пов’язану властивість (Ви могли б використовувати це з прикладом TextBoxабо a Checkbox).
  • OneTime: Це має таку ж поведінку, OneWayщо і лише за одноразового оновлення користувальницького інтерфейсу. Це має бути вашим вибором за замовчуванням для прив'язки (з різних причин, про які я тут більше не писатиму), ви повинні використовувати інші типи прив'язок, лише якщо вам насправді потрібна додаткова функціональність.
  • OneWayToSource: Це протилежне OneWayзмінам значення користувальницького інтерфейсу, оновлюючим властивість.

Якщо ви нічого не вказали, поведінка буде залежати від елемента керування, який ви використовуєте.

Для отримання додаткової інформації див. BindingModeEnum на MSDN .


Дякую. це корисно ... Але, будь ласка, вкажіть приклад TwoWay ... я хочу знати, як це відображає код, що стоїть позаду.
DATT OZA

2
@DATT: що ви маєте на увазі під "вказати"? В основному, якщо ви встановите Mode = TwoWay у XAML, коли ви зміните значення графічного інтерфейсу, він автоматично оновить властивість C #. Але ваше властивість із запізненням коду має бути реалізовано в класі (наприклад, ViewModel), який реалізує інтерфейс INotifyPropertyChanged. Коли код, що стоїть позаду, змінює значення властивості через set, потрібно викликати PropertyChanged, щоб графічний інтерфейс повідомив про зміну значення, і він автоматично оновиться.
Дейв,

1
Якщо ви нічого не вказали, поведінка буде залежати від ВЛАСНОСТІ, якою ви користуєтесь.
Мауро Сампієтро

37

Прив'язка складається з двох сутностей:

  1. Джерело (як правило, ViewModel у сценаріях MVVM)
  2. Ціль (елемент керування інтерфейсом користувача)

Ціль має бути a DependencyObject(для прив'язки до роботи), а джерелом може бути або a, DependencyObjectабо він повинен мати якийсь механізм імітації системи прив'язки WPF щодо її зміни (реалізація INotifyPropetyChnagedінтерфейсу).


MVVM рекомендує, щоб проект ViewModel був вільний від будь-яких посилань, пов’язаних із View, і тому рекомендується використовувати INotifyPropertyChangedінтерфейс, щоб зробити об’єкт Source чутим за допомогою прив’язки WPF. Прив'язка відбувається між властивістю Source та властивістю Target (має бути a DependencyProperty). наприклад, TextPropertyз TextBoxкласу DataBound в (скажімо) UserNameвластивість моделі уявлення. WPF палітурка пропонує чотири типи палітурки. Пам'ятайте, прив'язка виконується на потоці інтерфейсу користувача, якщо не вказано інше, щоб вона працювала інакше.

  1. OneWay : Цільова властивість прослуховуватиме зміну вихідної властивості та оновлюватиметься сама. Якщо програмно змінити властивість ViewwModel UserName, це відобразиться у текстовому полі. Це є проміжною вартістю, оскільки система прив’язки стежить лише за джерелом змін.
  2. TwoWay : Цільова властивість прослуховуватиме зміну вихідної властивості та оновлюватиметься сама. І вихідна властивість прослуховуватиме цільову властивість, що змінюється, і оновлюватиметься сама. І властивість, TextPropertyі UserNameвластивість залишатимуться синхронізованими та оновлюватимуть одне одне, якщо одне зміниться. Це найдорожче, оскільки система зв’язування повинна стежити за змінами обох сторін.
  3. OneWayToSource : Властивість Source зміниться, якщо змінити цільову властивість. Якщо користувач змінить значення TextProperty, UserNameвластивість прийме змінене значення. Це знову є проміжною вартістю, оскільки система прив’язки стежить лише за ціллю змін.
  4. OneTime : Це трапляється лише один раз за час прив’язки, властивість Target буде оновлено до властивості Source, коли відбудеться Прив’язка. Це найменш витратний і рекомендується для випадків , коли у вас є статичні дані , які будуть показані , наприклад Label, і TextBlockт.д.

Якщо ви нічого не згадуєте, кожна цільова властивість має режим прив'язки за замовчуванням, пов'язаний із собою. Наприклад, TextPropertya TextBoxмає режим прив'язки за замовчуванням як TwoWay. Для TextPropertya TextBlockце один із шляхів.

Бажано вибрати правильний режим, оскільки це може допомогти зменшити затримку програми, особливо у випадках, коли у вас є велика кількість елементів керування в інтерфейсі користувача.

Докладніше про MVVM - ось стаття, написана мною.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.