Ce type de CollectionView ne prend pas en charge les modifications de son SourceCollection à partir d'un thread différent de l'expéditeur au fil

J'ai un DataGrid qui est le remplissage de données à partir de ViewModel par la méthode asynchrone.Mon DataGrid est :

<DataGrid ItemsSource="{Binding MatchObsCollection}"  x:Name="dataGridParent" 
                      Style="{StaticResource EfesDataGridStyle}" 
                      HorizontalGridLinesBrush="#DADADA" VerticalGridLinesBrush="#DADADA" Cursor="Hand" AutoGenerateColumns="False" 
                      RowDetailsVisibilityMode="Visible"  >

Je suis en utilisant http://www.amazedsaint.com/2010/10/asynchronous-delegate-command-for-your.html à mettre en œuvre de façon asynchrone dans mon viewmodel.

Voici mon viewmodel code:

public class MainWindowViewModel:WorkspaceViewModel,INotifyCollectionChanged
    {        

        MatchBLL matchBLL = new MatchBLL();
        EfesBetServiceReference.EfesBetClient proxy = new EfesBetClient();

        public ICommand DoSomethingCommand { get; set; }
        public MainWindowViewModel()
        {
            DoSomethingCommand = new AsyncDelegateCommand(
                () => Load(), null, null,
                (ex) => Debug.WriteLine(ex.Message));           
            _matchObsCollection = new ObservableCollection<EfesBet.DataContract.GetMatchDetailsDC>();                

        }       

        List<EfesBet.DataContract.GetMatchDetailsDC> matchList;
        ObservableCollection<EfesBet.DataContract.GetMatchDetailsDC> _matchObsCollection;

        public ObservableCollection<EfesBet.DataContract.GetMatchDetailsDC> MatchObsCollection
        {
            get { return _matchObsCollection; }
            set
            {
                _matchObsCollection = value;
                OnPropertyChanged("MatchObsCollection");
            }
        }        
        //
        public void Load()
        {            
            matchList = new List<GetMatchDetailsDC>();
            matchList = proxy.GetMatch().ToList();

            foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
            {
                _matchObsCollection.Add(match);
            }

        }

Comme vous pouvez le voir dans ma méthode Load() dans mon ViewModel d'abord, je suis matchList (qui est une liste de DataContract Classe) à partir de mon Service.Puis par la boucle foreach, je suis d'insérer ma matchList des articles à mon _matchObsCollection(qui est une ObservableCollection de DataContract Classe)).Maintenant, ici, j'obtiens l'erreur ci-dessus (comme je l'ai indiqué dans le Titre) "Ce type de CollectionView ne prend pas en charge les modifications de son SourceCollection à partir d'un thread différent de l'expéditeur au fil"
Ce type de CollectionView ne prend pas en charge les modifications de son SourceCollection à partir d'un thread différent de l'expéditeur au fil

Quelqu'un peut-il me suggérer une solution.En outre, si possible, je voudrais savoir comment faire pour lier mon DataGrid en Vue et aussi l'actualiser de manière asynchrone si tout meilleure façon est là.

  • La Solution ici : codeproject.com/Articles/64936/...
  • merci pour le post en CodeProject..
  • Pas de problème, je suis sûr qu'il va travailler pour vous. Merci de laisser des commentaires à la CodeProject lorsque vous obtenez une chance. Bonne chance!