Привязка к сложному объекту в Silverlight - PullRequest
0 голосов
/ 18 ноября 2009

Я знаю, это должно быть что-то простое, что я пропустил. Я использую сервисы данных для передачи данных в мое приложение silverlight. Когда я связываю данные с моей сеткой данных, она работает как шарм

LessonGrid.ItemsSource = context.Lessons

однако, как только я пытаюсь обернуть свои объекты в более сложную структуру данных, он перестает работать

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

Я попытался определить привязку с путем и без, и, похоже, не работает

<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}"/>

Предложения


После дополнительных исследований:

Хорошо, это не имеет ничего общего со сложными объектами. Даже этот код показывает две строки, но без данных. Что мне не хватает?

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>

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009

Хорошо, я понял это сам. Это что-то в неявных типах, которые не нравятся привязке. Это показывает пустую сетку

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

, но при этом отображаются данные.

LessonGrid.ItemsSource = new[] {new Temp {StartTime = 111, Text = "hi there"}};
0 голосов
/ 18 ноября 2009

Вы уверены, что ваш запрос Linq вернет какие-либо элементы? А какие-нибудь предметы, которые включают StartTime?

Как я вижу, ваш запрос возвращает объект, который содержит два параметра, Lesson и Color, но не StartTime. И я думаю, что разделитель между параметрами должен быть запятой (,).

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

Затем вы можете привязать свою собственность в вашей DataGrid:

<data:DataGridTextColumn Header="Date" Binding="{Binding StartTime}"/>
or
<data:DataGridTextColumn Header="Date" Binding="{Binding Path=StartTime}"/>
0 голосов
/ 18 ноября 2009

Вы создали запрос Linq, но еще не выполнили его. Для того, чтобы действительно выполнить, вы должны сделать что-то вроде .ToList () Попробуйте это:

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