DataGrid 绑定异步填充的 ObservableCollection 会抛出错误,指出非 Dispatcher 线程不允许对 SourceCollection 进行更改。
问题是由线程关联引起的。 ObservableCollection 最初是在 UI 线程上创建的,因此只能从 UI 线程访问它。要从不同的线程修改它,必须将委托放置在 UI Dispatcher 上。
<code class="csharp">public void Load() { matchList = new List<GetMatchDetailsDC>(); matchList = proxy.GetMatch().ToList(); foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList) { App.Current.Dispatcher.Invoke((Action)delegate { _matchObsCollection.Add(match); }); } }</code>
通过调用 UI Dispatcher 上的委托,添加到 ObservableCollection安排在 UI 线程上,解决异常。
对于 DataGrid 的异步绑定和刷新,请考虑在 ViewModel 属性上使用 INotifyPropertyChanged 并调用 Dispatcher 来刷新UI 元素。
以上是如何从 WPF 中的非调度程序线程修改 ObservableCollection?的详细内容。更多信息请关注PHP中文网其他相关文章!