في MVVMCROSS ، هما الربط لمرة واحدة وربط في اتجاه واحد وهما وضعان متميزان لربط البيانات يخدمان أغراض مختلفة.
الربط لمرة واحدة
ينقل الربط لمرة واحدة من بيانات ViewModel إلى العرض مرة واحدة فقط ، عندما يتم تعيين مصدر الربط في البداية. بعد هذا النقل الأولي ، لا يراقب الربط التغييرات في ViewModel ولا يقوم بتحديث العرض ما لم يتم إعادة تعيين مصدر الربط نفسه. هذا الوضع مفيد للحقول القابلة للتكوين ولكن لا تتغير بشكل متكرر بعد تعيينها. على سبيل المثال ، في MVVMCross ، يتم استخدام الربط لمرة واحدة لتنظيم نص ثابت من ملفات اللغة ، حيث من الشائع للمستخدمين اختيار لغة مرة واحدة ولا يغيرونها بشكل متكرر [1].
ربط اتجاه واحد
من ناحية أخرى ، يقوم الربط في اتجاه واحد ، بتحديث العرض بشكل مستمر عندما تتغير الخاصية المقابلة في ViewModel. هذا يعني أن أي تغييرات على خاصية ViewModel سوف تنعكس تلقائيًا في العرض. ومع ذلك ، فإن التغييرات التي تم إجراؤها مباشرة على العرض لا تؤثر على ViewModel. يكون الربط أحادي الاتجاه مفيدًا عند عرض البيانات التي تأتي من مصدر ديناميكي ، مثل بيانات المستشعر أو خلاصات الشبكة ، حيث يجب أن يعكس العرض أحدث حالة ViewModel ولكنه لا يحتاج إلى إعادة التحديثات إليها [1].
الاختلافات الرئيسية
-تحديث التردد: يقوم الربط لمرة واحدة بتحديث العرض مرة واحدة فقط في الإعداد ، بينما يقوم الربط أحادي الاتجاه بتحديث العرض بشكل مستمر عندما يتغير ViewModel.
-تغيير المراقبة: لا يراقب الربط لمرة واحدة التغييرات في ViewModel بعد الإعداد الأولي ، في حين أن الربط أحادي الاتجاه يستمع بنشاط للتغييرات في ViewModel.
-حالات الاستخدام: لمرة واحدة مثالية للبيانات الثابتة أو المتغيرة بشكل غير منتظم ، في حين أن اتجاه واحد مناسب بشكل أفضل للبيانات الديناميكية التي يجب عرضها في الوقت الفعلي دون تفاعل المستخدم الذي يؤثر على ViewModel.
باختصار ، في حين أن كلا الوضعين ينقلان بيانات ViewModel إلى العرض ، فإن الربط لمرة واحدة لا يعمل مرة واحدة فقط ولا يراقب التغييرات ، في حين أن الربط أحادي الاتجاه يقوم باستمرار بتحديث العرض بناءً على تغييرات ViewModel.
الاستشهادات:[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-binding-mode-used-in-a-project
[4] https://www.mvvmcross.com/documentation/fundamentals/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-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-shold-shroid-project/understing-the-data-binding-syntax
[7] https://www.mvvmcross.com/documentation/advanced/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]