web-dev-qa-db-ja.com

WPFバインディングを強制的に更新するにはどうすればよいですか?

シンプルバインドを使用してアイテムソースがアタッチされたコンボボックスがあります。コンボボックスが読み込まれたら、このバインドを更新する方法はありますか?

103
Techee

バインディング式を使用できます:

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

しかし、 Blindmeisが述べたように 変更通知を起動することもできます。さらに、コレクションがINotifyCollectionChanged(たとえばObservableCollection<T>で実装されている)を実装している場合、同期するため、行う必要はありませんこれのいずれか。

180
H.B.

mvvmを使用し、itemssourceがvmにある場合。更新する場合は、コレクションプロパティに対してINotifyPropertyChangedを呼び出すだけです。

OnPropertyChanged("YourCollectionProperty");
50
blindmeis

コントロールの新しい値でデータソースを更新する場合、2セントを追加するには、UpdateSource()の代わりにUpdateTarget()を呼び出す必要があります。

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

MultiBindingフレンドリーバージョン...

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

BindingExpression.UpdateTarget()を使用してみてください

6
Kushal Waikar