في MVVMCROSS ، يخدم الربط لمرة واحدة وربط في اتجاهين أغراض مميزة في إدارة التفاعل بين العرض و ViewModel.
الربط لمرة واحدة
يتم استخدام الربط لمرة واحدة لنقل البيانات من ViewModel إلى العرض مرة واحدة فقط ، عند تعيين مصدر الربط. بعد هذا النقل الأولي ، لا يراقب الربط التغييرات على خصائص ViewModel ولا يقوم بتحديث العرض ما لم يتم إعادة تعيين مصدر الربط نفسه. هذا الوضع مفيد للحقول القابلة للتكوين ولكن لا تتغير بشكل متكرر بعد تعيينها. على سبيل المثال ، في MVVMCross ، يتم استخدام الربط لمرة واحدة لتنظيم نص ثابت من ملفات اللغة ، حيث يحدد المستخدم عادة لغة مرة واحدة ونادراً ما يغيرها بعد ذلك [1] [10].
ربط في اتجاهين
من ناحية أخرى ، يحدد الارتباط في اتجاهين اتصالًا مستمرًا ثنائي الاتجاه بين العرض و ViewModel. التغييرات في العرض أو تحديثات مشغل ViewModel في الآخر. يكون هذا الوضع مفيدًا بشكل خاص عند تحرير البيانات الموجودة ، مثل ملء النماذج ، حيث يجب أن تنعكس كل من إدخال المستخدم وأي تغييرات من ViewModel في الوقت الفعلي. يتم استخدام الربط ثنائي الاتجاه بشكل شائع في MVVMCross وغالبًا ما يكون بمثابة الوضع الافتراضي للربط الجديد [1] [2].
الاختلافات الرئيسية
-اتجاه تدفق البيانات: يقوم الربط لمرة واحدة فقط بتحديث العرض من ViewModel مرة واحدة ، بينما يقوم الربط في اتجاهين بتحديث كل من العرض و ViewModel بشكل مستمر.
-تغيير المراقبة: الربط لمرة واحدة لا يراقب التغييرات بعد التحديث الأولي ، في حين يراقب الربط ثنائي الاتجاه بشكل مستمر الطرفين والتحديثات.
-حالات الاستخدام: لمرة واحدة مثالية للبيانات الثابتة أو المتغيرة بشكل غير متكرر ، في حين أن الاتجاهين أكثر ملاءمة للنماذج التفاعلية أو تبادل البيانات الديناميكي.
باختصار ، يتم استخدام الربط لمرة واحدة لإعداد البيانات الثابت أو الأولي ، في حين يتم استخدام الربط ثنائي الاتجاه للسيناريوهات التفاعلية حيث يحتاج كل من العرض و iewmodel إلى عكس تغييرات بعضهما البعض في الوقت الفعلي.
الاستشهادات:[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-twway-data-binding-differ-from-simple-auto-sync
[5] https://stackoverflow.com/questions/17156368/
[6] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-shold-shroid-project/understing-the-data-binding-syntax
[7] https://stackoverflow.com/questions/13504906/what-is-twwway-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://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode؟view=net-maui-9.0
[12]