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
DDDasal
2025-01-09 20:52:43543semak imbas

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

<code class="language-csharp">public static readonly DependencyProperty TestProperty =
    DependencyProperty.Register(
        nameof(Test),
        typeof(string),
        typeof(MyControl),
        new PropertyMetadata("DEFAULT"));</code>

2. Set Bindings.RelativeSource dalam XAML

<code class="language-xml"><TextBlock Text="{Binding Test,
    RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>

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:

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext,
    ...
});</code>

Tetapkan sumber pengikatan secara tersirat dalam XAML:

<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>

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:
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