Silverlight数据绑定错误

时间:2010-05-26 22:43:18

标签: wpf linq silverlight data-binding listbox

我在网上找到了一个示例,解释了如何在WPF中使用LINQ对ListBox控件执行数据绑定。该示例工作正常,但是当我在Silverlight中复制相同的代码时,它不起作用。我不知道Silverlight和WPF之间是否存在根本区别?

以下是XAML的示例:

<ListBox x:Name="listBox1">
 <ListBox.ItemTemplate>
  <DataTemplate>
   <StackPanel>

     <TextBlock Text="{Binding Name}" FontSize="18"/>
     <TextBlock Text="{Binding Role}" />     

   </StackPanel>
  </DataTemplate>
 </ListBox.ItemTemplate>
</ListBox>

以下是我的代码示例:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
  string[] names = new string[] { "Captain Avatar", "Derek Wildstar", "Queen Starsha" };
  string[] roles = new string[] { "Hero", "Captain", "Queen of Iscandar" };

  listBox1.ItemSource = from n in names from r in roles select new { Name = n, Role = r}
}

2 个答案:

答案 0 :(得分:1)

Silverlight不支持绑定到匿名类型。 (从技术上讲,Silverlight不支持反映内部类型,并且因为匿名类型是内部的,所以这不起作用)。有关简单的解决方法,请参阅this article - 您只需要创建一个模型类来保存数据。

public class MyItem
{
   public string Name { get; set; }
   public string Role { get; set; }
}

listBox1.ItemSource = from n in names from r in roles select new MyItem() { Name = n, Role = r}

答案 1 :(得分:1)

在Silverlight中,您无法绑定到匿名类型。 Silverlight要求绑定的项目类型为public,但匿名类型为internal

您需要创建一个公共类型来显示结果: -

public class MyItem
{
   public string Name {get; set; }
   public string Role {get; set; }
}

现在在您的代码中: -

listBox1.ItemSource = from n in names from r in roles select new MyItem() { Name = n, Role = r}