Rumah >pembangunan bahagian belakang >C++ >Mengapa XAML Saya Mengikat kepada Harta Ketergantungan Gagal, Tetapi Kod Di Belakang Berfungsi?
Sifat pergantungan mengikat gagal dalam XAML tetapi berfungsi dengan baik dalam kod belakang.
TestProperty
Pengisytiharan sifat kebergantungan tidak mempunyai operator nameof()
, mengakibatkan ketidakpadanan antara nama sifat dan laluan pengikatan XAML. 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.
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!