Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon การผูกมัดครั้งเดียวแตกต่างจากการผูกทางเดียวใน mvvmcross อย่างไร


การผูกมัดครั้งเดียวแตกต่างจากการผูกทางเดียวใน mvvmcross อย่างไร


ใน 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-inuse
[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-thedroid-project/understanding-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] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_binding_better_than_twoway/