Kawalan Pengguna WPF: Isu Mengikat XAML dengan Sifat Ketergantungan
Mengikat pada sifat kebergantungan dalam XAML Kawalan Pengguna WPF boleh menjadi rumit. Mari kita periksa senario biasa:
Kawalan Pengguna dengan TextBlock:
<code class="language-xml"><UserControl ... x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test}" /> </UserControl></code>
Harta Pergantungan dalam Kawalan Pengguna:
<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>
MainWindow ViewModel (atau DataContext):
<code class="language-csharp">private string _myText = "default"; public string MyText { get { return _myText; } set { _myText = value; NotifyPropertyChanged(); } }</code>
Mengikat dalam MainWindow (Berjaya):
<code class="language-xml"><TextBlock Text="{Binding MyText}" /></code>
Mengikat dalam Kawalan Pengguna (Gagal):
<code class="language-xml"><MyControl Test="{Binding MyText}" /></code>
Pengikatan Kod Di Belakang (Berjaya):
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });</code>
Punca Punca:
Pengikatan XAML dalam Kawalan Pengguna gagal kerana sumber pengikatan tidak ditakrifkan secara eksplisit. Ia lalai kepada sifat Kawalan Pengguna sendiri.
Penyelesaian:
Nyatakan sumber pengikatan menggunakan RelativeSource
:
<code class="language-xml"><UserControl ... x:Class="WpfTest.MyControl"> <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> </UserControl></code>
Ini secara jelas memberitahu pengikatan untuk mencari moyang jenis UserControl
untuk harta Test
. Sebagai alternatif, anda boleh menggunakan AncestorType={x:Type Window}
jika konteks data berada pada tahap Tetingkap.
Pertimbangan Utama:
DataContext
dalam pembina Kawalan Pengguna secara amnya tidak digalakkan dan boleh membawa kepada masalah yang mengikat.Dengan mengikuti garis panduan ini, anda boleh mengikat sifat pergantungan dengan pasti dalam Kawalan Pengguna WPF anda.
Atas ialah kandungan terperinci Mengapa Pengikatan XAML Saya Tidak Berfungsi pada Harta Ketergantungan dalam Kawalan Pengguna WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!