[c#] WPF 바인딩을 강제로 새로 고치는 방법은 무엇입니까?

간단한 바인딩을 사용하여 첨부 된 항목 소스가있는 콤보 상자가 있습니다. 콤보 상자가로드되면이 바인딩을 새로 고칠 수있는 방법이 있습니까?



답변

바인딩 표현식을 사용할 수 있습니다.

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

그러나 Blindmeis가 언급했듯이 변경 알림을 실행할 수도 있습니다. 또한 컬렉션이 구현되면 INotifyCollectionChanged(예 :에서 구현 됨 ObservableCollection<T>) 동기화 되므로이 작업을 수행 할 필요가 없습니다.


답변

mvvm을 사용하고 itemssource가 VM에있는 경우. 새로 고치고 싶을 때 컬렉션 속성에 대해 INotifyPropertyChanged를 호출하면됩니다.

OnPropertyChanged("YourCollectionProperty");


답변

2 센트를 추가하려면 데이터 소스를 새 컨트롤 값으로 업데이트하려면 UpdateSource()대신 UpdateTarget()다음 을 호출해야합니다 .

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


답변

MultiBinding 친화적 버전 …

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


답변

사용해보십시오 BindingExpression.UpdateTarget()


답변

백엔드에서 데이터를 가져오고 한 줄의 코드로 화면을 업데이트했습니다. 효과가있었습니다. 왜 우리가 Interface를 구현해야하는지 잘 모르겠습니다. (Windows 10, UWP)

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


답변