A DataGrid 绑定异步填充的 ObservableCollection 会抛出错误,指出不允许从非 Dispatcher 线程对 SourceCollection 进行更改。
问题是由线程关联引起的。 ObservableCollection 最初是在 UI 线程上创建的,因此只能从 UI 线程访问它。要从不同的线程修改它,必须将委托放置在 UI Dispatcher 上。
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 上的委托,在 UI 线程上安排对 ObservableCollection 的添加,从而解决异常。
用于异步绑定和刷新 DataGrid,请考虑在 ViewModel 属性上使用 INotifyPropertyChanged 并调用 Dispatcher 来刷新 UI 元素。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3