"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > WPF의 비디스패처 스레드에서 ObservableCollection을 수정하는 방법은 무엇입니까?

WPF의 비디스패처 스레드에서 ObservableCollection을 수정하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:697

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

"이 유형의 CollectionView는 Dispatcher 스레드와 다른 스레드에서 SourceCollection에 대한 변경 사항을 지원하지 않습니다."

문제 설명

DataGrid 바인딩 비동기적으로 채워진 ObservableCollection에 대한 오류는 Dispatcher가 아닌 스레드에서 SourceCollection에 대한 변경이 허용되지 않는다는 오류를 발생시킵니다.

해결책

문제는 스레드 선호도에서 발생합니다. ObservableCollection은 처음에 UI 스레드에서 생성되므로 UI ​​스레드에서만 액세스할 수 있습니다. 다른 스레드에서 수정하려면 위임을 UI 디스패처에 배치해야 합니다.

업데이트된 ViewModel 코드

public void Load()
{
    matchList = new List();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}

UI Dispatcher에서 대리자를 호출하면 ObservableCollection에 대한 추가가 UI 스레드에서 예약되어 예외가 해결됩니다.

향상된 바인딩 및 새로 고침

비동기의 경우 DataGrid 바인딩 및 새로 고침을 수행하려면 ViewModel 속성에서 INotifyPropertyChanged를 사용하고 Dispatcher를 호출하여 UI 요소를 새로 고치는 것이 좋습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3