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


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


ใน MVVMCROSS การผูกมัดครั้งเดียวและการผูกสองทางให้บริการที่แตกต่างกันในการจัดการปฏิสัมพันธ์ระหว่างมุมมองและ ViewModel

การผูกมัดครั้งเดียว

การเชื่อมโยงครั้งเดียวใช้เพื่อถ่ายโอนข้อมูลจาก ViewModel ไปยังมุมมองเพียงครั้งเดียวเมื่อตั้งค่าแหล่งที่เชื่อมโยง หลังจากการถ่ายโอนครั้งแรกนี้การเชื่อมโยงไม่ได้ตรวจสอบการเปลี่ยนแปลงคุณสมบัติของ ViewModel และไม่อัปเดตมุมมองเว้นแต่แหล่งที่มาของการเชื่อมโยงจะถูกรีเซ็ต โหมดนี้มีประโยชน์สำหรับฟิลด์ที่กำหนดค่าได้ แต่ไม่เปลี่ยนแปลงบ่อย ๆ หลังจากตั้งค่า ตัวอย่างเช่นใน MVVMCROSS การเชื่อมโยงครั้งเดียวจะใช้สำหรับการตั้งค่าข้อความแบบคงที่จากไฟล์ภาษาเนื่องจากผู้ใช้มักจะเลือกภาษาหนึ่งครั้งและไม่ค่อยเปลี่ยนแปลงหลังจากนั้น [1] [10]

การผูกสองทาง

ในทางกลับกันการเชื่อมโยงสองทางสร้างการเชื่อมต่อแบบสองทิศทางระหว่างมุมมองและ ViewModel การเปลี่ยนแปลงในมุมมองหรือการอัปเดตทริกเกอร์ ViewModel ในอีกมุมมองหนึ่ง โหมดนี้มีประโยชน์อย่างยิ่งเมื่อแก้ไขข้อมูลที่มีอยู่เช่นกรอกแบบฟอร์มซึ่งทั้งอินพุตของผู้ใช้และการเปลี่ยนแปลงใด ๆ จาก ViewModel จะต้องสะท้อนให้เห็นในเวลาจริง การผูกสองทางมักใช้ใน MVVMcross และมักจะทำหน้าที่เป็นโหมดเริ่มต้นสำหรับการผูกใหม่ [1] [2]

ความแตกต่างที่สำคัญ

-ทิศทางของการไหลของข้อมูล: การเชื่อมโยงครั้งเดียวจะอัปเดตมุมมองจาก 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://www.mvvmcross.com/documentation/advanced/custom-data-binding
[4] https://softwareengineering.stackexchange.com/questions/322450/how-does-two-way-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-thedroid-project/understanding-the-data-binding-syntax
[7] https://stackoverflow.com/questions/13504906/what-is-two-way-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] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_is_oneway_binding_better_than_twoway/