Alternatif untuk ElementName di x:Bind dengan DataTemplates

Saat menggunakan sintaksis {Binding} tradisional, Anda dapat menentukan nama elemen untuk menunjuk ke kontrol tertentu pada halaman, dan dapat mengakses propertinya. Misalnya jika halaman tersebut bernama page Anda dapat melakukan:

{Binding ElementName=Page, Path=Name}

Dengan sintaks {x:Bind dikatakan

Dengan x:Bind, Anda tidak perlu menggunakan ElementName=xxx sebagai bagian dari ekspresi pengikatan. Dengan x:Bind, Anda dapat menggunakan nama elemen sebagai bagian pertama dari jalur pengikatan karena elemen yang diberi nama menjadi bidang dalam halaman atau kontrol pengguna yang mewakili sumber pengikatan akar.

Jadi untuk contoh di atas di {x:Bind} adalah

{x:Bind page.Name}

Yang berfungsi dengan baik, hingga berada di dalam templat data (misalnya ItemTemplate ListView). Dalam hal ini tidak lagi berfungsi karena mencari Page pada tipe data yang ditentukan yang menyebabkan kesalahan berikut (dengan asumsi tipe data saya adalah customer):

Kesalahan XamlCompiler WMC1110: Jalur pengikatan 'Halaman.Nama' tidak valid: Properti 'Halaman' tidak dapat ditemukan pada jenis 'Pelanggan'

Apa solusi untuk menggunakan sintaks {x:Bind} dengan templat data dan kontrol akses di luar templat data?

Kode contoh tersedia di sini (perhatikan penerapan khusus)


person Robert MacLean    schedule 29.09.2015    source sumber


Jawaban (1)


Sejauh yang saya tahu saat ini tidak ada cara untuk langsung mengikat properti kontrol menggunakan metode x:bind karena tidak mendukung nama elemen di dalam definisi pengikatannya.

Itu tidak berarti Anda tidak dapat mengikat ke kontrol di dalam dataTemplate Anda masih dapat melakukan sesuatu seperti ini untuk mengakses kontrol tetapi Anda tidak dapat menggunakan sintaks pengikatan x:Bind yang telah dikompilasi.

 <DataTemplate x:DataType="local:Customer">
     <StackPanel Orientation="Vertical">
         <Button Content="{Binding Name, ElementName=page}" />
         <TextBlock Text="{x:Bind Title}" />
     </StackPanel>        
 </DataTemplate>

Alasan kesalahan yang Anda dapatkan adalah karena cara templat data mengasuh sumber datanya. Pengikatan x:Bind tidak dapat mereferensikan objek kontrol dan tipe Pelanggan Anda menggunakan properti atau jalur Page.Name. Seperti yang ditunjukkan di atas, satu-satunya cara nyata untuk mengakses properti kontrol pengguna di luar kendali Anda hanya dengan menggunakan XAML adalah dengan kembali ke mekanisme pengikatan standar.

Saya harap ini menjawab pertanyaan Anda.

person davemsdevsa    schedule 29.09.2015