Um DataGrid vinculado para um ObservableCollection preenchido de forma assíncrona gera um erro informando que alterações no SourceCollection não são permitidas de um não-Dispatcher thread.
O problema surge da afinidade do thread. O ObservableCollection é criado inicialmente no thread de UI, tornando-o acessível apenas a partir do thread de UI. Para modificá-lo a partir de um thread diferente, o delegado deve ser colocado no 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);
});
}
}
Ao invocar o delegado no UI Dispatcher, as adições ao ObservableCollection são agendadas no thread da UI, resolvendo a exceção.
Para assíncrono vinculação e atualização do DataGrid, considere usar INotifyPropertyChanged nas propriedades do ViewModel e invocar o Dispatcher para atualizar a UI elementos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3