Question

J'ai un Silverlight DataGrid qui contient une seule colonne de modèle qui affiche un contrôle utilisateur. Le contrôle utilisateur a une barre de progression pour représenter le traitement et une fois le traitement terminé, une animation masque la barre de progression et affiche une étiquette terminée.

Il existe deux cas dans lesquels la grille de données ne semble pas se redessiner:

Premier , lorsqu'un utilisateur fait beaucoup de défilement, la grille de données commence par redessiner l'animation lorsque le contrôle utilisateur apparaît et finit par atteindre un point où elle ne redessine rien.

Deuxième , Il existe un événement de clic dans le contrôle utilisateur qui affiche une fenêtre contextuelle. Lorsque le popup est fermé, l'usercontrol ne parvient pas à se redessiner correctement.

Avez-vous des idées sur les raisons de ce problème et sur les solutions possibles?

Était-ce utile?

La solution

La réponse précédente est correcte. J'ai constaté que, parfois, vous devez gérer correctement les événements Loading_Row et Unloading_Row si vous souhaitez que l'un de vos contrôles se comporte correctement. Dans les cas où les propriétés des contrôles sont réellement liées à un objet pour fonctionner au mieux. Si vous essayez de vous fier aux animations et à la visibilité, vous verrez un comportement étrange, mais si vous liez la barre de progression à un objet qui conserve la progression de chaque élément en coulisse, chaque fois que cette ligne est affichée, elle se ré-affine et se redessine.

Autres conseils

Vous devez comprendre qu'un DataGrid n'a pas une instance de votre contrôle pour chaque ligne de la grille. La source de données peut contenir des millions de lignes, tandis que la grille n'a pas besoin de plus d'instances de votre contrôle que ce qui peut en être affiché à l'écran. Cela signifie que lorsque vous faites défiler, par exemple, il ne révèle pas les instances de votre contrôle précédemment invisibles; il n'affecte que les commandes actuellement visibles, quelles que soient les valeurs nécessaires pour afficher correctement la position de défilement actuelle.

Je ne sais pas s'il existe une solution de contournement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top