У MVVMCross одноразовий зв'язок і двосторонній зв'язування служать чітким цілям у управлінні взаємодією між видом та ViewModel.
одноразова палітурка
Одноразова прив'язка використовується для перенесення даних з ViewModel до перегляду лише один раз, коли встановлено джерело прив'язки. Після цього первинного передачі прив'язка не контролює зміни властивостей ViewModel і не оновлює перегляд, якщо не буде скинуто джерело прив’язки. Цей режим корисний для полів, які налаштовуються, але не змінюються часто після встановлення. Наприклад, у MVVMCross одноразовий прив'язка використовується для встановлення статичного тексту з мовних файлів, оскільки користувач зазвичай вибирає мову раз і рідко змінює її після цього [1] [10].
двостороння прив'язка
З іншого боку, двостороння прив'язка встановлює безперервний двонаправлений зв’язок між видом та ViewModel. Зміни або в поданні, або оновлення тригера ViewModel в іншому. Цей режим особливо корисний при редагуванні існуючих даних, таких як заповнення форм, де введення користувача, і будь-які зміни від ViewModel повинні відображатися в режимі реального часу. Двостороння зв'язок зазвичай використовується в MVVMCross і часто служить режимом за замовчуванням для нових прив’язок [1] [2].
Ключові відмінності
-Напрямок потоку даних: Одноразова прив'язка оновлює перегляд з ViewModel один раз, тоді як двостороння прив'язка оновлює як перегляд, так і ViewModel постійно.
-Зміна моніторингу: Одноразова прив'язка не контролює зміни після початкового оновлення, тоді як двостороння прив’язка постійно контролює та оновлює обидва кінці.
-Використовуйте випадки: Одноразова ідеальна для статичних або нечасто змінюючих даних, тоді як двосторонній краще підходить для інтерактивних форм або динамічного обміну даними.
Підсумовуючи, одноразовий прив'язування використовується для статичного або початкового налаштування даних, тоді як двостороння прив'язка використовується для інтерактивних сценаріїв, де і View, і ViewModel повинні відображати зміни один одного в режимі реального часу.
Цитати:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[3] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[4] https://softwareengineering.stackexchange.com/questions/322450/how-does-two-way-data-binding-differ-from-simple-auto-sync
[5] https://stackoverflow.com/questions/17156368/
.
[7] https://stackoverflow.com/questions/13504906/what-is-two-way-binding
[8] https://github.com/mvvmcross/mvvmcross/issues/29
[9] https://stackoverflow.com/questions/27803448/data-binding-one-vs-twoway
[10] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[11] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[12] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/