Rumah > pembangunan bahagian belakang > C++ > Mengapa XAML Saya Mengikat kepada Harta Ketergantungan Gagal, Tetapi Kod Di Belakang Berfungsi?

Mengapa XAML Saya Mengikat kepada Harta Ketergantungan Gagal, Tetapi Kod Di Belakang Berfungsi?

DDD
Lepaskan: 2025-01-09 20:52:43
asal
603 orang telah melayarinya

Why Is My XAML Binding to a Dependency Property Failing, But Code-Behind Works?

Sifat pergantungan mengikat XAML gagal

Soalan

Sifat pergantungan mengikat gagal dalam XAML tetapi berfungsi dengan baik dalam kod belakang.

Sebab

  1. Ralat pengisytiharan sifat ketergantungan: TestProperty Pengisytiharan sifat kebergantungan tidak mempunyai operator nameof(), mengakibatkan ketidakpadanan antara nama sifat dan laluan pengikatan XAML.
  2. Ralat sumber pengikatan dalam XAML: Sumber pengikatan (DataContext) tidak ditetapkan secara eksplisit dalam pengikatan XAML, jadi ia lalai kepada UserControl itu sendiri, bukannya DataContext yang diwarisi daripada tetingkap induk.
  3. Tetapkan DataContext dalam pembina: Menetapkan sifat DataContext dalam pembina UserControl akan menghalang pewarisan DataContext induk, menyebabkan sumber pengikatan menjadi tidak sah.

Penyelesaian

1. Istiharkan atribut kebergantungan dengan betul

public static readonly DependencyProperty TestProperty =
    DependencyProperty.Register(
        nameof(Test),
        typeof(string),
        typeof(MyControl),
        new PropertyMetadata("DEFAULT"));
Salin selepas log masuk

2. Set Bindings.RelativeSource dalam XAML

<TextBlock Text="{Binding Test,
    RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock>
Salin selepas log masuk

3. Padamkan tugasan DataContext dalam pembina

Alih keluar baris DataContext = this; kod daripada pembina UserControl.

Nota Tambahan

Tetapkan sumber pengikatan secara eksplisit dalam kod di belakang:

TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext,
    ...
});
Salin selepas log masuk

Tetapkan sumber pengikatan secara tersirat dalam XAML:

<MyControl Test="{Binding MyText}"></MyControl>
Salin selepas log masuk

Dalam XAML, sumber pengikatan tersirat menjadi lalai kepada DataContext semasa dan harus ditetapkan dengan betul oleh tetingkap induk. Menetapkan DataContext dalam pembina UserControl akan menimpa DataContext yang diwarisi, menyebabkan pengikatan gagal. Dengan menetapkan Source = DataContext dalam pengikatan di belakang kod, sumber pengikatan ditetapkan secara eksplisit kepada DataContext yang diwarisi, memastikan pengikatan itu sah.

Atas ialah kandungan terperinci Mengapa XAML Saya Mengikat kepada Harta Ketergantungan Gagal, Tetapi Kod Di Belakang Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan