เมื่อใช้ไวยากรณ์ {Binding} แบบดั้งเดิม คุณสามารถระบุชื่อองค์ประกอบให้ชี้ไปที่ส่วนควบคุมเฉพาะบนเพจ และสามารถเข้าถึงคุณสมบัติขององค์ประกอบได้ ตัวอย่างเช่น หากเพจชื่อ page
คุณสามารถทำได้:
{Binding ElementName=Page, Path=Name}
ด้วยไวยากรณ์ {x:Bind} มันบอกว่า
ด้วย x:Bind คุณไม่จำเป็นต้องใช้ ElementName=xxx เป็นส่วนหนึ่งของนิพจน์การโยง ด้วย x:Bind คุณสามารถใช้ชื่อขององค์ประกอบเป็นส่วนแรกของเส้นทางสำหรับการโยงได้ เนื่องจากองค์ประกอบที่มีชื่อจะกลายเป็นฟิลด์ภายในเพจหรือการควบคุมผู้ใช้ที่แสดงถึงแหล่งที่มาของการโยงรูต
ดังนั้นสำหรับตัวอย่างข้างต้นใน {x:Bind} จะเป็นดังนี้
{x:Bind page.Name}
ซึ่งทำงานได้ดีจนกระทั่งอยู่ภายในเทมเพลตข้อมูล (เช่น ItemTemplate ของ ListView) ซึ่งในกรณีนี้จะไม่ทำงานอีกต่อไปเนื่องจากกำลังมองหา Page
ในประเภทข้อมูลที่ระบุ ซึ่งนำไปสู่ข้อผิดพลาดต่อไปนี้ (สมมติว่าประเภทข้อมูลของฉันคือ customer
):
ข้อผิดพลาด XamlCompiler WMC1110: เส้นทางการเชื่อมโยงไม่ถูกต้อง 'Page.Name': ไม่พบคุณสมบัติ 'หน้า' ในประเภท 'ลูกค้า'
วิธีแก้ปัญหาในการใช้ไวยากรณ์ {x:Bind} กับเทมเพลตข้อมูลและการควบคุมการเข้าถึงภายนอกเทมเพลตข้อมูลคืออะไร
มีโค้ดตัวอย่างที่นี่ (หมายเหตุคอมมิตเฉพาะ)