Как принудительно привязать WPF к обновлению?

У меня есть поле со списком с источником источника, связанным с использованием простой привязки. Есть ли способ обновить эту привязку после загрузки комбо-поля?

Ответ 1

Вы можете использовать выражения привязки:

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

Но как отметил Blindmeis, вы также можете активировать уведомления об изменениях, если ваша коллекция реализует INotifyCollectionChanged (например, реализована в ObservableCollection<T>), она будет синхронизироваться так вам не нужно ничего делать.

Ответ 2

если вы используете mvvm, а ваш источник items находится в вашем vm. просто вызовите INotifyPropertyChanged для вашего свойства коллекции, если вы хотите обновить.

OnPropertyChanged("YourCollectionProperty");

Ответ 3

Чтобы добавить мои 2 цента, если вы хотите обновить свой источник данных новым значением вашего элемента управления, вам нужно вызвать UpdateSource() вместо UpdateTarget():

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

Ответ 4

Универсальная версия MultiBinding...

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

Ответ 5

Попробуйте использовать BindingExpression.UpdateTarget()

Ответ 6

Я извлекал данные из бэкэнд и обновлял экран только одной строкой кода. Это сработало. Не уверен, почему нам нужно реализовать интерфейс. (окна 10, UWP)

    private void populateInCurrentScreen()
    {
        (this.FindName("Dets") as Grid).Visibility = Visibility.Visible;
        this.Bindings.Update();
    }