2011-09-24 183 views
1

下面你可以看到我的类定义的一部分:Silverlight的数据绑定不起作用

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

没有包名称列下出现,但我可以看到售出之日起的值。这里发生了什么事情,难道不应该以这种方式工作吗?

在此先感谢。

+0

Page拥有自己的DataContext,页面上的DataGrid与页面的DataContext无关。我设置它的ItemsSource属性。 –

+0

我正在创建一个新问题,因为问题与数据绑定无关。感谢所有帮助过的人。 –

回答

0

的问题可能是,当你在服务/工厂MemberPackages,请确保您有在.include(“包”)如下:

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

这应该带回包细节是MemberPackage的一部分,然后绑定到Package.Name应该可以工作。

0

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

+0

否包不是DataContext的属性。但是网格并没有从页面上下文获取数据。我在加载数据之后从代码中设置ItemsSource。 –

+0

也许你应该使用一个mvvm框架,它为你做了所有的接线工作,我喜欢caliburn micro for wpf/silverlight – Jon

+0

感谢您的提示,但这不是项目的当前阶段的选项:) –

0

只需删除该Path=,并有这样的:

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

你并不需要指定的路径。

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

+0

没有这样工作也。 –

+0

我已经使用Include并可以看到在服务器端填充的Package属性。 –

+0

看来问题与数据绑定无关。我可以看到Package信息是从数据库中提取的,但是由于某种原因它没有传递给Silverlight。调试Silverlight应用程序显示Package对象为null。 –