2009-07-30 6 views
0

Je possède un DataGrid Silverlight qui contient une colonne de modèle unique 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 finie.Silverlight DataGrid Redraw Numéro

Il y a deux cas où le DataGrid ne semble pas se redessiner:

Première, lorsqu'un utilisateur fait beaucoup de défilement alors le DataGrid commencera par redessiner l'animation lorsque le usercontrol est en vue et atteindra finalement un point où il ne redessine rien.

Deuxième, Il y a un événement click dans le contrôle userc qui affiche un popup. Lorsque la fenêtre contextuelle est fermée, le paramètre usercontrol ne parvient pas à se redessiner correctement.

Des idées sur la raison de ce comportement et les moyens de contourner ce problème?

Répondre

1

La réponse précédente est correcte. J'ai trouvé que parfois vous devez gérer correctement les événements Loading_Row et Unloading_Row si vous voulez que vos contrôles se comportent correctement. Dans mes cas, 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 maintient la progression de chaque objet derrière les scènes, chaque fois que cette ligne est affichée, elle se reconnectera et redessinera.

+0

Avez-vous eu un comportement étrange lorsque les utilisateurs cliquent aussi dans la grille? Clic semble également invoquer un "repaint" qui peut forcer un redessin de l'animation aussi. – t3rse

0

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 contrôle que ne le permet l'écran. Cela signifie que lorsque vous faites défiler, par exemple, il ne révèle pas les instances de votre contrôle auparavant invisibles; il assigne juste les contrôles actuellement visibles toutes les valeurs sont nécessaires pour faire l'affichage correct pour la position de défilement en cours.

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

Questions connexes