يعالج MVVMCROSS التحديثات عند استخدام الربط لمرة واحدة عن طريق نقل البيانات من ViewModel إلى العرض مرة واحدة فقط ، عند تعيين مصدر الربط في البداية. بعد هذا النقل الأولي ، لا يراقب الربط بنشاط الرسائل أو الأحداث من عرض ViewModel. لذلك ، لن تنعكس أي تغييرات لاحقة على خاصية ViewModel في العرض ما لم يتم إعادة تعيين مصدر الربط نفسه أو إعادة تعيينه.
النقاط الرئيسية للربط لمرة واحدة في MVVMCROSS:
1. نقل البيانات الأولي: ينقل البيانات من ملفات ViewModel إلى العرض عند إنشاء الربط لأول مرة. هذا مفيد عادة للحقول القابلة للتكوين ولكن لا تتغير بشكل متكرر بعد تعيينها.
2. لا توجد مراقبة مستمرة: على عكس الروابط ثنائية الاتجاه أو أحادية الاتجاه ، لا تراقب الروابط لمرة واحدة بشكل مستمر وحدة ViewModel للتغييرات. هذا يعني أنه إذا تغيرت خاصية ViewModel بعد الربط الأولي ، فلن يتم تحديث العرض تلقائيًا.
3. الحالات الاستخدام: يتم استخدام الربط لمرة واحدة بشكل شائع في السيناريوهات حيث تكون البيانات ثابتة أو نادراً ما تتغير ، مثل تعيين نص ثابت من ملفات اللغة. بمجرد تحديد لغة ما ، من غير المألوف أن يقوم المستخدم بتغييره بشكل متكرر ، مما يجعل الربط لمرة واحدة مناسبة لمثل هذه الحالات [1].
4. إعادة تعيين مصدر الربط: إذا تم إعادة تعيين مصدر الربط أو إعادة تعزيزه ، فإن الربط لمرة واحدة سيقوم بنقل البيانات الجديدة من ViewModel إلى العرض مرة أخرى. ومع ذلك ، فإن هذا يتطلب إجراءً صريحًا لإعادة ضبط مصدر الربط.
5. القيود في طرق العرض الديناميكية: في طرق العرض الديناميكية ، مثل تلك التي تستخدم "MVXRecyClerview" ، قد لا تتصرف الروابط لمرة واحدة كما هو متوقع إذا تم إعادة تدوير المشاهدات. في مثل هذه الحالات ، يمكن إعادة تقييم الربط عند إعادة استخدام وجهات النظر ، مما قد يؤدي إلى سلوك غير متوقع [6].
باختصار ، تم تصميم الربط لمرة واحدة من MVVMCross للسيناريوهات حيث يتم تعيين البيانات مرة واحدة ولا تحتاج إلى تحديث ديناميكي. إنه يبسط البنية التحتية الملزمة عن طريق تجنب المراقبة المستمرة لنظام ViewModel للتغييرات ، ولكنه يتطلب تدخلًا يدويًا لتحديث العرض إذا تغيرت بيانات ViewModel بعد الربط الأولي.
الاستشهادات:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency injection
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm؟view=net-maui-9.0
[4] https://stackoverflow.com/questions/46558177/mvvmcross-updates-to--property-in-view-not-propagating-to-property-in-viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[6] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[7] https://github.com/mvvmcross/mvvmcross/issues/87
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/march/async-programming-patterns-for-asynchronous-mvvm-applications-data-binding
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode؟view=net-maui-9.0
[10]
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup