Rumah >pembangunan bahagian belakang >C++ >Mengapa Pengikatan XAML Saya Tidak Berfungsi pada Harta Ketergantungan, Tetapi Berfungsi dalam Code-Behind?
Pengikatan XAML gagal pada sifat pergantungan
Pengikatan data untuk sifat pergantungan tidak mempunyai kesan dalam XAML, tetapi berfungsi dengan baik dalam kod belakang. Coretan kod berikut menunjukkan masalah:
<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test}"/> </UserControl></code>
Sifat kebergantungan ditakrifkan seperti berikut:
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register("Test", typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT")); public string Test { get { return (string)GetValue(TestProperty); } set { SetValue(TestProperty, value); } }</code>
Dalam tetingkap utama, mengikat kepada sifat biasa berfungsi dengan sempurna:
<code class="language-xml"><TextBlock Text="{Binding MyText}"/></code>
Walau bagaimanapun, pengikatan yang sama dalam kawalan pengguna tidak mengemas kini teks:
<code class="language-xml"><MyControl Test="{Binding MyText}" x:Name="TheControl"/></code>
Perlu diperhatikan bahawa pengikatan berfungsi dengan baik apabila dilaksanakan dalam kod belakang:
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });</code>
Penyelesaian:
Perisytiharan sifat pergantungan yang betul:
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Mengikat dalam UserControl XAML:
<code class="language-xml"><UserControl ...="" x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"/> </UserControl></code>
Elakkan daripada menetapkan DataContext dalam pembina UserControl:
Jangan sekali-kali tetapkan DataContext dalam pembina UserControl. Ini menghalang UserControl daripada mewarisi DataContext induknya.
Atas ialah kandungan terperinci Mengapa Pengikatan XAML Saya Tidak Berfungsi pada Harta Ketergantungan, Tetapi Berfungsi dalam Code-Behind?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!