我有一个组合框与项目源附加使用简单的绑定。有没有办法刷新这个绑定一旦组合框加载?
可以使用绑定表达式:
private void ComboBox_Loaded(object sender, RoutedEventArgs e) { ((ComboBox)sender).GetBindingExpression(ComboBox.ItemsSourceProperty) .UpdateTarget(); }
但是 正如布林德梅斯所说也可以触发更改通知,如果您的集合实现了 INotifyCollectionChanged(例如在 ObservableCollection<T>中实现的) ,那么它将进行同步,因此您不需要执行任何此类操作。
INotifyCollectionChanged
ObservableCollection<T>
尝试使用 BindingExpression.UpdateTarget()
BindingExpression.UpdateTarget()
如果您使用 mvvm 并且您的项目源位于您的 vm 中。只需在需要刷新时为集合属性调用 INotifyPropertyChanged 即可。
OnPropertyChanged(nameof(YourCollectionProperty));
为了增加我的2分钱,如果你想用 Control 的新值更新你的数据源,你需要调用 UpdateSource()而不是 UpdateTarget():
UpdateSource()
UpdateTarget()
((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
多绑定友好版本..。
private void ComboBox_Loaded(object sender, RoutedEventArgs e) { BindingOperations.GetBindingExpressionBase((ComboBox)sender, ComboBox.ItemsSourceProperty).UpdateTarget(); }
我从后端获取数据,用一行代码更新屏幕。成功了。不确定,为什么我们需要实现 Interface。(视窗10,UWP)
private void populateInCurrentScreen() { (this.FindName("Dets") as Grid).Visibility = Visibility.Visible; this.Bindings.Update(); }