我有一个使用简单绑定附加了项目源的组合框。是否有任何方法可以在组合框加载后刷新此绑定?
我有一个使用简单绑定附加了项目源的组合框。是否有任何方法可以在组合框加载后刷新此绑定?
您可以使用绑定表达式:
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
((ComboBox)sender).GetBindingExpression(ComboBox.ItemsSourceProperty)
.UpdateTarget();
}
但是正如 Blindmeis所指出的,您也可以触发更改通知,如果您的集合实现了INotifyCollectionChanged
(例如在ObservableCollection<T>
中实现),那么它会同步,因此您不需要执行任何操作。
如果您使用了MVVM架构并且您的ItemsSource位于ViewModel中,当您需要刷新时,只需为集合属性调用INotifyPropertyChanged即可。
OnPropertyChanged(nameof(YourCollectionProperty));
INotifyPropertyChanged
,但您必须将端口保留为该包装器的私有属性,因此需要编写一个属性和方法,以确保在项目中使用其他端口时,您所感兴趣的通知属性始终通过包装器。 - Assimilater顺便说一下,如果您想使用控件的新值更新数据源,您需要调用UpdateSource()
而不是UpdateTarget()
:
((TextBox)sender).GetBindingExpression(TextBox.TextProperty).UpdateSource();
多绑定友好版本...
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
BindingOperations.GetBindingExpressionBase((ComboBox)sender, ComboBox.ItemsSourceProperty).UpdateTarget();
}
尝试使用BindingExpression.UpdateTarget()