MVVMCROSS จัดการการอัปเดตไฟล์ภาษาโดยใช้การเชื่อมโยงครั้งเดียวในลักษณะที่เฉพาะเจาะจงโดยเฉพาะอย่างยิ่งเมื่อจัดการกับข้อความคงที่จากไฟล์ภาษา นี่คือคำอธิบายโดยละเอียดเกี่ยวกับวิธีการทำงาน:
ภาพรวมของการเชื่อมโยงครั้งเดียวใน mvvmcross
การเชื่อมโยงครั้งเดียวใน MVVMCROSS เป็นโหมดการเชื่อมโยงที่ถ่ายโอนค่าจาก ViewModel ไปยังมุมมอง การถ่ายโอนนี้เกิดขึ้นเฉพาะเมื่อมีการตั้งค่าแหล่งรวมและไม่ได้ตรวจสอบการเปลี่ยนแปลงข้อความหรือเหตุการณ์จาก ViewModel อย่างแข็งขัน เมื่อการถ่ายโอนเริ่มต้นเสร็จสมบูรณ์การเชื่อมโยงจะไม่ดำเนินการอัปเดตใด ๆ เว้นแต่แหล่งที่มาของตัวเองจะถูกรีเซ็ต [1]
การจัดการการอัปเดตไฟล์ภาษา
เมื่อใช้การเชื่อมโยงครั้งเดียวสำหรับไฟล์ภาษา MVVMCROSS มักจะตั้งค่าข้อความหนึ่งครั้งเมื่อเลือกภาษา นี่เป็นเพราะเป็นเรื่องปกติที่ผู้ใช้จะเลือกภาษาในช่วงเริ่มต้นของแอปพลิเคชันและเป็นเรื่องแปลกสำหรับพวกเขาที่จะเปลี่ยนแปลงบ่อยครั้ง อย่างไรก็ตามหากภาษาจำเป็นต้องได้รับการอัปเดตแบบไดนามิกการเชื่อมโยงเพียงครั้งเดียวนั้นไม่เพียงพอเนื่องจากไม่ได้อัปเดตข้อความโดยอัตโนมัติเมื่อภาษาเปลี่ยนไป
การอัปเดตภาษาแบบไดนามิก
ในการจัดการการอัปเดตภาษาแบบไดนามิกโดยทั่วไปคุณจะต้องใช้ตรรกะเพิ่มเติม สิ่งนี้อาจเกี่ยวข้องกับการรีเซ็ตแหล่งที่มีผลผูกพันเมื่อภาษาเปลี่ยนแปลงหรือใช้โหมดการเชื่อมโยงที่แตกต่างกันซึ่งรองรับการอัปเดตเช่นการผูกสองทางแม้ว่านี่จะเป็นเรื่องธรรมดาสำหรับข้อความคงที่
ใช้ mvvmcross.plugin.resxlocalization
สำหรับการจัดการไฟล์ภาษา MVVMCROSS จะจัดเตรียมปลั๊กอิน `MVVMCROSS.plugin.resxLocalization` ซึ่งช่วยให้คุณสามารถจัดเก็บสตริงในไฟล์` .resx` สำหรับภาษาที่แตกต่างกัน ปลั๊กอินนี้ช่วยจัดการสตริงที่มีการแปลและสามารถรวมเข้ากับคอนเทนเนอร์ IOC ของแอปพลิเคชันเพื่อให้การเข้าถึงทรัพยากรที่มีการแปลจาก ViewModels และมุมมอง [4]
ในการอัปเดตภาษาแบบไดนามิกด้วยปลั๊กอินนี้คุณจะต้องใช้ตรรกะที่อัปเดต UI เมื่อภาษาเปลี่ยนไป สิ่งนี้อาจเกี่ยวข้องกับการอัปเดตคุณสมบัติข้อความขององค์ประกอบ UI ด้วยตนเองหรือใช้วิธีการเชื่อมโยงแบบไดนามิกที่ตอบสนองต่อการเปลี่ยนแปลงภาษา
บทสรุป
ในขณะที่การเชื่อมโยงครั้งเดียวเหมาะสำหรับการตั้งค่าข้อความคงที่จากไฟล์ภาษาในตอนแรกการจัดการการอัปเดตภาษาแบบไดนามิกต้องใช้ขั้นตอนการใช้งานเพิ่มเติม MVVMCROSS มีเครื่องมือเช่นปลั๊กอิน `ResxLocalization` เพื่อจัดการทรัพยากรที่มีการแปล แต่คุณต้องใช้ตรรกะเพื่ออัปเดต UI เมื่อภาษาเปลี่ยนไป
โดยสรุปการเชื่อมโยงครั้งเดียวของ MVVMcross ไม่ได้ออกแบบมาเพื่อจัดการการอัปเดตภาษาโดยอัตโนมัติ แต่ด้วยตรรกะและปลั๊กอินเพิ่มเติมที่เหมาะสมคุณสามารถได้รับการสนับสนุนภาษาแบบไดนามิกในแอปพลิเคชันของคุณ
การอ้างอิง:[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[3] https://www.mvvmcross.com/mvvmcross-5-release/
[4] https://mobileprogrammerblog.wordpress.com/2017/12/30/mvvm-cross-with-xamarin-platform-resx-localization/
[5] https://stackoverflow.com/questions/17156368/
[6] https://stackoverflow.com/questions/60311571/the-intended-purpose-of-mvvmcross-createBindingsetet
[7] https://www.mvvmcross.com/documentation/plugins/jsonlocalisation
[8] https://www.mvvmcross.com/documentation/fundamentals/linking
[9] https://www.mvvmcross.com/blog/