2009-03-25 11 views
2

J'ai une liste de tableaux de chaînes en entrée. La dimension du tableau est statique pour toute la liste mais je ne peux pas connaître la taille du tableau tant que la liste n'a pas été récupérée. J'ai besoin de lier la liste dans un DataGrid dans Silverlight.Liaison de tableau Xaml par position sur Datagrid

J'ai essayé de créer des colonnes au moment de l'exécution, liant chaque colonne à une position de tableau particulière mais ne trouvant pas de chemin.

Avez-vous une idée comment faire?

Je pourrais éventuellement "convertir" ma liste de tableau en n'importe quoi d'autre qui pourrait être lié dans une grille de données?

L'idée est d'avoir une sorte de matrice 2d montrée à l'intérieur de la grille de données dans Silverlight (je pense que le problème est similaire).

Liste

column_1  column_2  column_3 .. column_m 

string[1,1] string[1,2] string[1,3] .. string[1,m] 
string[2,1] string[2,2] string[2,3] .. string[2,m] 
string[3,1] string[3,2] string[3,3] .. string[3,m] 
.... 
string[n,1] string[n,2] string[n,3] .. string[n,m] 

n est liste longueur, m est la colonne liste nombre max.

Toute idée est appréciée

Répondre

1

Malheureusement, ce ne va pas être facile.

Avez-vous des contraintes valides, comme le nombre maximal de colonnes autorisées ou quelque chose comme ça? Si vous ne (disons que vous avez un maximum de colonne N), vous pourriez être en mesure de faire quelque chose par

  1. Avoir une classe qui expose les propriétés N (nommées Col1 ... Cöln pour exemple) cartographier les contenu de la matrice pour une ligne à la colonne X
  2. Génération d'une liste de cette catégorie, une instance pour chaque ligne
  3. Génération du nombre correct de colonne à la volée, la liaison de chaque colonne à la propriété colx
  4. Binding votre DataGrid à cette liste

C'est un peu laid, mais il travaillerait.

Si vous n'avez pas besoin de compter sur DataGrid, il est possible d'utiliser UniformGrid. Un UniformGrid est un panneau qui met en forme ses enfants dans une grille régulière (chaque élément a la même largeur, chaque élément a la même hauteur). Vous pouvez indiquer le nombre de colonnes lors de l'exécution, et le panneau adaptera les enfants les uns après les autres jusqu'au nombre de colonnes, puis continuera sur une autre ligne. Vous pouvez lier un objet ItemsControl à votre tableau, indiquant qu'il doit utiliser UniformGrid comme panneau de disposition et indiquant un ItemTemplate approprié pour rendre chaque chaîne.

La deuxième option est beaucoup plus facile, mais vous n'aurez pas les fonctionnalités du DataGrid comme le tri, le déplacement de colonnes, la sélection de lignes, l'édition d'événements par ligne, etc.

+0

Merci de votre intérêt. Je vais essayer d'utiliser le premier. Malheureusement, j'ai besoin du comportement intégré de la grille de données. J'ai aussi trouvé une autre réponse à ma question: http://silverlight.net/forums/t/13083.aspx. Merci encore – krumikaze

2

J'ai trouvé deux solutions au problème qui utilisent le schéma dans la réponse de Denis:

  • la première consiste à utiliser la réflexion pour générer une classe à l'exécution de la liaison comme suggéré dans this article (merci à Vladimir Bodurov). J'ai testé cette solution et je vais essayer de l'utiliser sur mon projet. Le seul problème en ce moment est que pour une grande collection, les performances sont médiocres. Mais j'espère que quelqu'un va le réparer dans le prochain relese (Silverlight 3 ne semble pas avoir résolu ce problème, pour l'instant)

  • la deuxième solution utilisera un langage dynamique pour générer des données. Je ne sais pas si cela pourrait être plus rapide ou pas (probablement pas), mais pourrait éventuellement aider. Je vais essayer dans le futur et utiliser ironpython ou ruby ​​pour générer des classes qui seront liées dans datagrid.

Si quelqu'un a essayé d'utiliser la deuxième solution ou des informations sur les performances liées à la création de classes lors de l'exécution, il sera apprécié.

Giorgio

+0

Cet article de Vladimir est * impressionnant * ... exactement ce que je avais besoin pour [SQL dans Silverlight] http://conceptdevelopment.net/Silverlight2/SharpSql02/default.html je dû mettre à jour le code de Vladimir pour generic Dictionary posté ici http://conceptdevelopment.net/Silverlight2/SharpSql02/DataSourceCreator.cs.html – Conceptdev