J'ai une Datagrid connectée à Datatable, qui doit charger une très grande quantité de lignes.WPF Datagrid/Datatable: grand nombre de lignes
Pour accélérer les choses, je charge 10% des lignes et affiche le formulaire. La plupart du temps, l'utilisateur n'a besoin que de ces 10% (ce sont les entrées les plus récentes). Dans un thread d'arrière-plan, je charge les 90% restants des lignes dans un autre datatable (SecondData). Ensuite, je fusionne les deux datatables:
FirstData.BeginLoadData()
FirstData.Merge(SecondData, False)
FirstData.EndLoadData()
Cela fonctionne très bien, mais l'opération de fusion prend beaucoup de temps. Si j'inverse l'opération (fusion de SecondData avec FirstData), cela prend beaucoup moins de temps. Mais ensuite, je dois réattribuer une datasource (SecondData) à la Datagrid, et l'utilisateur perd la position de défilement courante, la ligne sélectionnée, etc.
J'ai également essayé d'ajouter les lignes directement à FirstData à partir du thread d'arrière-plan, et il semble fonctionner très bien. Mais quand je fais défiler la Datagrid après cela, je me bloque, et "l'index interne de DataTable est corrompu", après cela.
Quelle serait la bonne façon de procéder?
Merci pour votre réponse très détaillée! Cependant, je dois réécrire presque tout mon application complète pour implémenter toute la logique ObservableCollection, parce que je travaille avec Datatables maintenant. La raison pour laquelle ce code fonctionne pour vous est que la seule chose que vous modifiez à l'intérieur du thread est '_mwvm' (le viewmodel). J'ai besoin de modifier le Datatable dans le thread, et cela corrompt le viewmodel (qui n'est pas modifié), provoquant les erreurs et les exceptions. Mais merci pour votre réponse! – Muis