Saya punya kotak kombo dengan sumber item yang dilampirkan menggunakan penjilidan sederhana. Apakah ada cara untuk menyegarkan penjilidan ini setelah kotak kombo dimuat?
Saya punya kotak kombo dengan sumber item yang dilampirkan menggunakan penjilidan sederhana. Apakah ada cara untuk menyegarkan penjilidan ini setelah kotak kombo dimuat?
Jawaban:
Anda dapat menggunakan ekspresi binding:
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
((ComboBox)sender).GetBindingExpression(ComboBox.ItemsSourceProperty)
.UpdateTarget();
}
Tetapi seperti yang dicatat oleh Blindmeis, Anda juga dapat mengaktifkan pemberitahuan perubahan, lebih lanjut jika koleksi Anda diterapkan INotifyCollectionChanged
(misalnya diterapkan di ObservableCollection<T>
) maka akan disinkronkan sehingga Anda tidak perlu melakukan semua ini.
jika Anda menggunakan mvvm dan itemssource Anda terletak di vm Anda. cukup panggil INotifyPropertyChanged untuk properti collection Anda ketika Anda ingin menyegarkan.
OnPropertyChanged("YourCollectionProperty");
INotifyPropertyChanged
, tetapi Anda harus menjaga port tetap privat untuk pembungkus itu dan karenanya perlu menulis properti dan metode untuk semua yang ada di port yang Anda gunakan di tempat lain dalam proyek untuk memastikan bahwa properti yang ingin Anda beri tahu selalu melalui pembungkus
nameof(YourCollectionProperty)
bertentangan dengan string literal. Ini mencegah bug melakukan refactoring dan lebih eksplisit apa yang sebenarnya dimaksudkan. Ini tentu saja di mana Anda tidak dapat menggunakan CallerMemberName
atribut yang bahkan lebih bagus
Untuk menambahkan 2 sen saya, jika Anda ingin memperbarui sumber data Anda dengan nilai baru Kontrol Anda, Anda perlu memanggil UpdateSource()
alih-alih UpdateTarget()
:
((TextBox)sender).GetBindingExpression(ComboBox.TextProperty).UpdateSource();
Coba gunakan BindingExpression.UpdateTarget()
Saya mengambil data dari backend dan memperbarui layar hanya dengan satu baris kode. Berhasil. Tidak yakin, mengapa kita perlu mengimplementasikan Interface. (windows 10, UWP)
private void populateInCurrentScreen()
{
(this.FindName("Dets") as Grid).Visibility = Visibility.Visible;
this.Bindings.Update();
}