MVVMCross'ta, bir kerelik bağlanma ve tek yönlü bağlanma, farklı amaçlara hizmet eden iki farklı veri bağlama modudur.
Bir kerelik bağlama
Bir kerelik bağlanma, verileri ViewModel'den görünüme, bağlanma kaynağı başlangıçta ayarlandığında yalnızca bir kez aktarır. Bu ilk aktarımdan sonra, bağlanma ViewModel'deki değişiklikleri izlemez ve bağlanma kaynağının kendisi sıfırlanmadıkça görünümü güncellemez. Bu mod, yapılandırılabilen ancak ayarlandıktan sonra sık sık değişmeyen alanlar için kullanışlıdır. Örneğin, MVVMCross'ta, kullanıcıların bir dili bir kez seçmeleri ve daha sonra sık sık değiştirmemesi yaygın olduğu için dil dosyalarından statik metin ayarlamak için bir kerelik bağlanma kullanılır [1].
Tek yönlü bağlama
Tek yönlü bağlanma ise, ViewModel'deki ilgili özellik değiştiğinde görünümü sürekli olarak günceller. Bu, ViewModel'in mülkündeki herhangi bir değişikliğin otomatik olarak görünüme yansıtılacağı anlamına gelir. Ancak, doğrudan görünümde yapılan değişiklikler ViewModel'i etkilemez. Tek yönlü bağlanma, görünümün ViewModel'in en son durumunu yansıtması gereken, ancak güncellemeleri geri göndermesi gerekmediği, sensör verileri veya ağ yayınları gibi dinamik bir kaynaktan gelen verileri görüntülerken kullanışlıdır [1].
Anahtar Farklılıklar
-GÜNCELLEME Frekansı: Bir kerelik bağlama, görünümü yalnızca bir kez kurulumda güncellerken, tek yönlü bağlanma ViewModel değiştiğinde görünümü sürekli olarak günceller.
-Değiştir izleme: Bir kerelik bağlanma, ilk kurulumdan sonra ViewModel'deki değişiklikleri izlemezken, tek yönlü bağlanma ViewModel'deki değişiklikleri aktif olarak dinler.
-Kullanım Örneği: Bir kerelik statik veya nadiren değişen veriler için idealdir, tek yön, ViewModel'i etkileyen kullanıcı etkileşimi olmadan gerçek zamanlı olarak görüntülenmesi gereken dinamik veriler için daha uygundur.
Özetle, her iki mod da ViewModel'den görünüme veri aktarırken, bir kerelik bağlanma bunu yalnızca bir kez yapar ve değişiklikleri izlemez, oysa tek yönlü bağlanma görünümü ViewModel değişikliklerine göre sürekli olarak günceller.
Alıntılar:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[3] https://stackoverflow.com/questions/41768962/mvvmcross-default
[4] https://www.mvvmcross.com/documentation/fundament/viewmodel-lifecycle
[5] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[6] https://yanxiaodi.gitbook.io/xamarin-mvmcross-handbook/using-mvvmcross-to--nroid-project/understing-the-data-binding-syntax
[7] https://www.mvvmcross.com/documentation/adved/custom-data-binding
[8] https://github.com/mvvmcross/mvvmcross/issues/29
[9] https://stackoverflow.com/questions/27803448/data-binding-one-vs-two-way
[10] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[11] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/