2010-10-17 24 views
1

J'ai des données bidimensionnelles avec un nombre variable de lignes et de colonnes et je dois l'afficher pour l'éditer. Le format des données elles-mêmes est essentiellement décrit par une liste de descripteurs de ligne et de colonne avec un texte d'en-tête pour chaque ligne ou colonne.Comment modifier dynamiquement les définitions de lignes et de colonnes d'une grille WPF?

J'ai dérivé un contrôle de Grid qui a deux propriétés pour les descripteurs de ligne et de colonne et construit les rangées et les colonnes sur la base de cette information. Il souscrit également les événements de changement de liste de la collection de deux descripteurs pour se mettre à jour automatiquement si l'utilisateur ajoute ou supprime dynamiquement des lignes ou des colonnes.

Et voici le problème se produit - lorsque j'essaie de modifier les définitions de ligne ou de colonne du gird, je reçois une exception indiquant que la collection est en lecture seule. Donc je suppose qu'il n'est pas possible de modifier la définition après que la grille a été créée et montrée une fois. Des idées?

Et juste au cas où c'est important - tout est lié aux données. Il existe une collection (dynamique) de tables dont chaque table contient ses propres définitions (dynamiques) de lignes et de colonnes et les données entrées pour chaque cellule.

Répondre

1

J'ai fait un test rapide et j'ai pu ajouter des lignes et des colonnes sans problèmes à une grille à l'exécution via le code, en utilisant les collections RowDefinitions et ColumnDefinitions. Je ne pense pas que les liaisons aient quelque chose à voir avec le problème non plus.

Si par contre vous vouliez dire DataGrid, oui, cela change un peu les choses.

+0

Vous avez raison - les collections peuvent être modifiées. J'ai reçu plusieurs notifications de modification de la liste des descripteurs modifiés et la première a correctement mis à jour les définitions de lignes et de colonnes. Le second a échoué parce que maintenant la collection est marquée comme étant en lecture seule. Je ne sais pas (et je n'ai pas étudié) pourquoi cela fonctionne de cette façon mais pour mon scénario tout va bien - je ne fais rien si les définitions sont devenues en lecture seule car toutes les modifications nécessaires sont déjà faites la première fois. À un certain point après l'exécution de mon code, les collections redeviennent modifiables et permettent d'autres modifications de la grille. –