web-dev-qa-db-fra.com

Comment forcer une liaison WPF à actualiser?

J'ai une liste déroulante avec la source d'articles attachée en utilisant une reliure simple. Est-il possible d'actualiser cette liaison une fois la zone de liste déroulante chargée?

103
Techee

Vous pouvez utiliser des expressions de liaison:

private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    ((ComboBox)sender).GetBindingExpression(ComboBox.ItemsSourceProperty)
                      .UpdateTarget();
}

Mais comme Blindmeis l’a noté vous pouvez également activer les notifications de modification, si votre collection implémente INotifyCollectionChanged (par exemple, implémenté dans le ObservableCollection<T>) il se synchronisera afin que vous n’ayez rien à faire.

180
H.B.

si vous utilisez mvvm et que votre source d’articles se trouve dans votre vm. Appelez simplement INotifyPropertyChanged pour votre propriété de collection lorsque vous souhaitez actualiser.

OnPropertyChanged("YourCollectionProperty");
50
blindmeis

Pour ajouter mes 2 centimes, si vous souhaitez mettre à jour votre source de données avec la nouvelle valeur de votre contrôle, vous devez appeler UpdateSource() au lieu de UpdateTarget():

((TextBox)sender).GetBindingExpression(ComboBox.TextProperty).UpdateSource();
27
dotNET

MultiBinding version amicale ...

private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    BindingOperations.GetBindingExpressionBase((ComboBox)sender, ComboBox.ItemsSourceProperty).UpdateTarget();
}
8
Tempeck

Essayez d'utiliser BindingExpression.UpdateTarget()

6
Kushal Waikar