2009-11-18 8 views
0

Je sais qu'il doit quelque chose de simple que j'ai raté. J'utilise les services de données pour obtenir des données dans mon application Silverlight. Quand je lie les données à mon DataGrid cela fonctionne comme un charmeLiaison à un objet complexe dans Silverlight

LessonGrid.ItemsSource = context.Lessons 

Cependant, dès que je tente d'envelopper mes objets dans la structure de données plus complexe, il cesse de fonctionner

LessonGrid.ItemsSource = context.Lessons.Select(l => new {Lesson = l; Color=Colors.Yellow}) 

J'ai essayé de définir la liaison avec chemin et sans et ne semble pas fonctionner

<data:DataGridTextColumn Header="Date" Binding="{Binding StartTime}"/> 
<data:DataGridTextColumn Header="Date" Binding="{Binding StartTime, Path=Lesson.StartTime}"/> 
<data:DataGridTextColumn Header="Date" Binding="{Binding Path=Lesson.StartTime}"/> 
<data:DataGridTextColumn Header="Date" Binding="{Binding StartTime, Path=Lesson}"/> 

Suggestions?


Après plus d'autres recherches:

Ok, il n'y a rien à voir avec des objets complexes. Même ce code montre deux lignes mais pas de données. Qu'est-ce que je rate?

LessonGrid.ItemsSource = 
new[] {new {Color = Colors.Yellow,StartTime = 12, Text="text"}, 
new {Color = Colors.Red, StartTime = 14, Text="text3"}}; 

XAML:

<data:DataGrid x:Name="LessonGrid" AutoGenerateColumns="True" Height="375" IsReadOnly="True"> </data:DataGrid> 
+0

Juste pour clarifier, StartTime est une propriété de l'objet Lesson. – Vitalik

Répondre

2

Ok, je pensais que ce moi-même. C'est quelque chose à propos des types implicites que la liaison n'aime pas. Ceci montre la grille vide

LessonGrid.ItemsSource = new[] {new {StartTime = 111, Text = "hi there"}}; 

mais ceci rend des données.

LessonGrid.ItemsSource = new[] {new Temp {StartTime = 111, Text = "hi there"}}; 
0

Vous avez créé une requête LINQ mais n'a pas fait encore exécuté. Afin de vous exécuter devez réellement faire quelque chose comme .ToList() Essayez ceci:

LessonGrid.ItemsSource = context.Lessons.Select(l => new {Lesson = l; Color=Colors.Yellow}).ToList(); 
+0

la requête est exécutée lorsque le DataGrid est rendu. Je reçois autant de lignes dans ma grille que d'objets dans le résultat, elles sont toutes vides. – Vitalik

0

Etes-vous sûr que votre requête Linq retourner des articles? Et tous les éléments qui incluent StartTime? Comme je peux le voir votre requête renvoie un objet qui contient deux paramètres, Lesson et Color, mais pas StartTime. Et je suppose que le séparateur entre les paramètres devrait être une virgule (,).

LessonGrid.ItemsSource = context.Lessons.Select(l => new {Lesson=l, Color=Colors.Yellow, StartTime=12}); 

Ensuite, vous pouvez lier à votre propriété dans votre DataGrid:

<data:DataGridTextColumn Header="Date" Binding="{Binding StartTime}"/> 
or 
<data:DataGridTextColumn Header="Date" Binding="{Binding Path=StartTime}"/> 
+0

ma "leçon" a la propriété "DateTime StartTime", c'est le champ que j'essaye de lier. – Vitalik

Questions connexes