Menyelesaikan masalah Isu Mengikat WPF XAML dengan Sifat Ketergantungan
Artikel ini menangani masalah WPF biasa: Pengikatan data XAML gagal mengemas kini UI apabila sifat kebergantungan berubah, walaupun pengikatan kod di belakang berfungsi dengan betul.
Senario:
Aplikasi WPF menggunakan sifat kebergantungan dalam XAML, tetapi pengikatan tidak mengemas kini UI apabila nilai sifat terikat itu berubah. Pengikatan kod di belakang, bagaimanapun, berfungsi seperti yang diharapkan.
Takrifan Harta Kebergantungan (Salah):
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register("Test", typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Pengikatan XAML (Masalah):
<code class="language-xaml"><TextBlock Text="{Binding Test}"></TextBlock></code>
Penyelesaian:
Isu teras terletak pada pendaftaran sifat kebergantungan dan pengikatan XAML. Berikut ialah pendekatan yang diperbetulkan:
Takrifan Harta Kebergantungan yang Dibetulkan:
<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), // Use nameof for better maintainability typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
Pengikatan XAML yang Dibetulkan:
<code class="language-xaml"><TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>
XAML yang diperbetulkan ini secara eksplisit menetapkan RelativeSource
untuk mencari UserControl
sebagai sumber pengikat.
Pertimbangan Penting:
Elakkan Menetapkan Konteks Data dalam Pembina Kawalan Pengguna: Menetapkan DataContext
dalam pembina UserControl
menghalang pewarisan DataContext
ibu bapa, selalunya menyebabkan kegagalan mengikat.
Alternatif: Pengikatan Eksplisit dalam Kod Belakang: Jika menggunakan RelativeSource
tidak praktikal, tetapkan pengikatan secara eksplisit dalam kod di belakang:
<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, // Use the MainWindow's DataContext Path = new PropertyPath("MyText"), Mode = BindingMode.TwoWay });</code>
Dengan mengikut langkah ini, anda boleh memastikan pengikatan XAML anda mengemas kini sifat pergantungan anda dengan betul, yang membawa kepada aplikasi WPF yang berfungsi dan responsif.
Atas ialah kandungan terperinci Mengapa Pengikatan XAML Saya Tidak Mengemas kini Harta Ketergantungan Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!