Bonjour,
je travaille sur un projet WPF framework 4.0 avec une Datagrid bindée à une collection de données custom.
Il y a environ 20 propriétés dans les données, et plusieurs milliers d'enregistrements dans la collection.
J'utilise un MultiValueConverter pour changer le background color de chaque DatagridTextColumn en fonction de certaines règles .
Lorsque l'utilisateur clique sur un bouton, une règle s'applique et le background des cellules de la grille doit être rafraichi. Ma collection ne change jamais.
Lorsque j'appelle MyDatagrid.Items.Refresh() ou CollectionViewSource.GetDefaultView(MyDatagrid.ItemsSource).Refresh(), le MultiValueConverter est appelé 2 fois pour chaque cellule visible.
Lorsque j'appelle MyDatagrid.InvalidateVisual(), ou UpdateLayout(), les cellules ne sont rafraichies que lorsque je bouge le curseur de la grille, ce qui n'est pas acceptable.
Il y a plusieurs grilles à rafraichir, et chaque grille met environ 190 ms à se redessiner, ce qui est un peu trop à mon goût.
Pour des raisons de performance, je dois rafraichir les cellules visibles une fois uniquement.
Comment dois-je procéder ?
Le binding est en mode OneWay. L'algo utilisé dans le BackgroundConverter est très light, et n'est pas responsable de la lenteur du rafraichissement.
Merci d'avance.
Partager