【问题标题】:Silverlight databinding doesn't workSilverlight 数据绑定不起作用
【发布时间】:2011-09-24 12:39:12
【问题描述】:

您可以在下面看到我的类定义的一部分:

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

Package Name 列下没有任何内容,但我可以看到 Date Sold 值。这是怎么回事,它不应该这样工作吗?

提前致谢。

【问题讨论】:

  • 页面有自己的DataContext,页面上的DataGrid与页面的DataContext无关。我正在设置它的 ItemsSource 属性。
  • 我正在创建一个新问题,因为该问题与数据绑定无关。感谢所有帮助过的人。

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


【解决方案1】:

问题可能是当您在服务/工厂中获取 MemberPackages 时,请确保您拥有 .Include("Package") 如下:

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

这应该将包详细信息作为 MemberPackage 的一部分返回,然后您与 Package.Name 的绑定应该可以工作。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • No Package 不是 DataContext 的属性。但是网格不会从页面的上下文中获取它的数据。我在加载数据后从代码中设置它的 ItemsSource。
    • 也许你应该使用 mvvm 框架,它会为你完成所有这些连接,我喜欢 caliburn micro for wpf/silverlight
    • 感谢您的提示,但在项目的当前阶段这不是一个选项:)
    【解决方案3】:

    只需删除 Path= 即可:

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

    你不需要指定路径。

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

    【讨论】:

    • 我已经使用了 Include 并且可以看到 Package 属性在服务器端被填满。
    • 看来问题与数据绑定无关。我可以看到包信息是从数据库中提取的,但由于某种原因它没有传递给 Silverlight。调试 Silverlight 应用程序发现 Package 对象为空。
    猜你喜欢
    • 2015-10-14
    • 2012-01-17
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多