En résumé, nous ne pouvons pas obtenir des performances de défilement raisonnables à partir de n'importe quel contrôle WPF données pures.Grille WPF lente et de stutterie Défilement lorsque vous chargez de grandes quantités de données (40 colonnes, 2000 lignes)
Nous avons créé un prototype indépendant statique en utilisant la grille DevExpress WPF et uploadée ici:
Nous avons également essayé avec la grille Infragistics et Xceed, et le problème est le même.
Il semble que WPF ne peut tout simplement pas faire face à des grilles de données raisonnablement volumineuses affichant beaucoup de données dans la mesure où cela procure une expérience utilisateur fluide. Même sans aucun type de liaison de données, il suffit de fournir des données statiques (~ 40 colonnes de large, 2000 lignes) pour faire défiler le défilement. Aux niveaux les plus bas, le profileur semble indiquer une quantité excessive de "Mesure" survenant en plus de beaucoup d'éboueurs qui pourraient être la cause du bégaiement irrégulier.
Le code du prototype peut facilement être remplacé pour fonctionner avec d'autres grilles. Si quelqu'un est en mesure de produire une expérience de défilement lisse dans le scénario donné en particulier dans les cas où les données sont regroupées à plusieurs niveaux et est dense, s'il vous plaît laissez-nous savoir, nous serions très intéressés à vous entendre.
Détails supplémentaires:
Nous créons nos objets 2000 (avec ~ 40 propriétés chacun), et les affecter à la propriété DataSource de la grille.
Chacun de nos objets est représentée comme une classe similaire à ci-dessous:
public class RowViewModel
{
public double AskAsw { get; set; }
public string AskBmkName { get; set; }
public double AskBmkPrice { get; set; }
public double AskBmkSprd { get; set; }
... and so on
}
Ceux-ci sont créés et sont ajoutés à une collection/liste comme ceci:
for (int i = 1; i < 2000; i++)
{
_rowViewModels.Add(new RowViewModel(i));
}
Et puis lié à la grille de données. Très simple:
gridControl.DataSource = _rowViewModels;
Il en résulte une grille de données affichant cette information. Nous avons rendu la police plus petite (10px, à la demande de l'utilisateur), et auto-dimensionner et regrouper les colonnes. Le résultat se termine à la recherche de ce type:
http://i54.tinypic.com/21jt11t.png
Et le défilement est très stuttery/lent. Faites-nous savoir si vous avez des idées.
Comment vous remplissez la grille à l'aide databinding, ou manuellement Quel genre.? de la source de données est-il?Veuillez fournir plus de détails, car je doute que quelqu'un télécharge le fichier de projet ... –
Y a-t-il un moyen de spécifier le panneau de données dans ces grilles, si c'est le cas, vous devez envisager de placer un VirtualizingStackPanel. Il est spécifiquement conçu pour gérer de grands ensembles de données en différant la création d'éléments d'interface utilisateur jusqu'à ce que nécessaire – benPearce
@Thomas - merci pour les suggestions, j'ai ajouté plus de détails à la poste à la fin. –