Pour un projet personnel, j'ai besoin de remplir dynamiquement une grille, basée sur le contenu d'un tableau de taille variable. J'utilise le code suivant les lignes de ce qui est ci-dessous pour faire cela, et cela fonctionne bien, sauf que lorsque le tableau devient grand (comme dans 200 x 200 ou plus), il devient lent (plus de 20 secondes pour peupler). Il semble que l'instanciation des boutons soit rapide, mais l'ajout à la grille est lent.
Est-ce que je fais quelque chose de mal? Y a-t-il quelque chose que je puisse faire pour accélérer le processus en utilisant la grille régulière de WPF? Dois-je regarder un autre contrôle? Merci d'avance pour toute suggestion.Comment puis-je accélérer l'ajout de contrôles à une grille WPF?
int columns=200;
int rows=200;
var width = new GridLength(30);
var height = new GridLength(25);
for (int column = 0; column < columns; column++)
{
var columnDefinition = new ColumnDefinition();
columnDefinition.Width = width;
this.TestGrid.ColumnDefinitions.Add(columnDefinition);
}
for (int row = 0; row < rows; row++)
{
var rowDefinition = new RowDefinition();
rowDefinition.Height = height;
this.TestGrid.RowDefinitions.Add(rowDefinition);
}
for (int column = 0; column < columns; column++)
{
for (int row = 0; row < rows; row++)
{
var button = new Button();
button.Content = row.ToString() + ", " + column.ToString();
Grid.SetRow(button, row);
Grid.SetColumn(button, column);
this.TestGrid.Children.Add(button);
}
}
C'est aussi ce que je craignais, mais j'espérais peut-être qu'il y avait un tour de magie que je ne connaissais pas ... Et je ne construis pas le tableau World Mine Mine Sweeper, mais répliquais essentiellement l'interface Excel. – Mathias
Merci un million! Votre réponse m'a amené à repenser le problème et à réaliser que je peux complètement éviter le problème en changeant ma conception. – Mathias
Assurez-vous également de jeter un coup d'œil à la virtualisation des lignes et des colonnes. Il s'agit de maintenir le nombre d'éléments WPF créés à un niveau bas même lorsque vous vous liez à beaucoup d'éléments. –