Silverlight数据绑定不起作用

时间:2011-09-24 12:39:13

标签: data-binding silverlight-4.0 wcf-ria-services

下面你可以看到我的班级定义的一部分:

public class Package {
  public int PackageId { get; set; }
  public string Name { get; set; }
}

public class Member {
  public int MemberId { get; set; }
  public string DisplayName { get; set; }
}

public class MemberPackage {
  public int PackageId { get; set; }
  public int MemberId { get; set; }
  public DateTime DateSold { get; set; }

  public Member Member { get; set; }
  public Package Package { get; set; }
}

这些是EF 4模型类。我从WCF RIA服务中提取MemberPackage对象,并将它们绑定到UI上的DataGrid。为了显示包名,我使用了如下所示的绑定语法:

<sdk:DataGridTextColumn Header="Package Name" Binding="{Binding Path=Package.Name}" />
<sdk:DataGridTextColumn Header="Date Sold" Binding="{Binding DateSold}" />

“包名称”列下没有任何内容,但我可以看到“已售出日期”值。这里发生了什么,它不应该以这种方式工作吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

这与视图的数据上下文有关 - 您确定Package是视图模型(数据上下文)的属性,模型是否实现了INotifyPropertyChanged?

答案 1 :(得分:0)

只需删除Path=即可:

<sdk:DataGridTextColumn Header="Package Name" Binding="{Binding Package.Name}" />

您无需指定路径。

如果这不起作用,那么您应该确保Package MemberPackage成员在服务器端定义中具有[Include]属性。这将确保整个层次结构序列化到客户端。我最初没有建议这个,因为我认为您的代码已被编辑。

答案 2 :(得分:0)

问题可能是当您在服务/工厂中获得MemberPackages时,请确保您具有.Include(“Package”),如下所示:

return this.ObjectContext.MemberPackages
                .Include("Package");

这应该将Package详细信息作为MemberPackage的一部分返回,然后您对Package.Name的绑定应该有效。