2010-09-08 63 views
1

我有一个非常简单的设置,我无法在silverlight中工作。我订购了一系列OrderPayments。这些对象是实体框架模型的一部分,并通过WCF RIA Services公开。我可以很好地绑定到Order类的任何基本属性,但我想绑定到一个列表框来显示OrderPayments。这是ListBox的XAML。无法绑定silverlight中的子集合

<ListBox ItemsSource="{Binding Data.OrderPayments, ElementName=orderDataSource}"></ListBox> 

从来没有出现在列表框中,并且显示的订单至少有一个OrderPayment。 orderDataSource是包含订单的DomainDataSource。关于这个奇怪的是,我没有收到任何绑定错误,当我绑定到使用下面的代码一个TextBlock:

<TextBlock Text="{Binding Data.OrderPayments, ElementName=orderDataSource}" /> 

文本“OrderPayment”被输出到屏幕上。是否有什么不同,我必须做,让Silverlight真正拿起对象的引用?

整个以下XAML:

<riaControls:DomainDataSource AutoLoad="True" Name="orderDataSource" QueryName="GetOrder"> 
     <riaControls:DomainDataSource.QueryParameters> 
      <riaControls:Parameter ParameterName="orderid" Value="1" /> 
     </riaControls:DomainDataSource.QueryParameters> 
     <riaControls:DomainDataSource.DomainContext> 
      <ds:CEWCPSDomainContext /> 
     </riaControls:DomainDataSource.DomainContext> 
    </riaControls:DomainDataSource> 

    <StackPanel Orientation="Vertical" Margin="12"> 
     <StackPanel Orientation="Horizontal"> 
      <Button Width="100" Height="50" Content="Save &amp; Return" Margin="0,0,12,12" /> 
      <Button Width="100" Height="50" Content="Orders" Margin="0,0,12,12" /> 
      <Button Width="100" Height="50" Content="Emails" Margin="0,0,12,12" /> 
     </StackPanel> 

     <StackPanel Orientation="Horizontal"> 
      <dataForm:DataForm x:Name="dataForm1" Header="Order Contact Information" 
         AutoGenerateFields="False" AutoEdit="False" AutoCommit="False" 
         CurrentItem="{Binding Data, ElementName=orderDataSource}"> 
       <dataForm:DataForm.EditTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <StackPanel> 
         <dataForm:DataField Label="First Name"> 
          <TextBox Text="{Binding FirstName, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }" /> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Last Name"> 
          <TextBox Text="{Binding LastName, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Organization"> 
          <TextBox Text="{Binding Organization, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Phone"> 
          <TextBox Text="{Binding Phone, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Fax"> 
          <TextBox Text="{Binding Fax, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Email"> 
          <TextBox Text="{Binding Email, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Address 1"> 
          <TextBox Text="{Binding Address1, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="Address 2"> 
          <TextBox Text="{Binding Address2, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="City"> 
          <TextBox Text="{Binding City, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <dataForm:DataField Label="State"> 
          <TextBox Text="{Binding State, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
         <StackPanel Orientation="Horizontal" Width="Auto"> 
          <dataForm:DataField Label="Zip code"> 
           <TextBox Text="{Binding Zip, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
          </dataForm:DataField> 
          <dataForm:DataField> 
           <TextBox Text="{Binding Zip4, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
          </dataForm:DataField> 
         </StackPanel> 
         <dataForm:DataField Label="Country"> 
          <TextBox Text="{Binding Country, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True }"/> 
         </dataForm:DataField> 
        </StackPanel> 
       </StackPanel> 
      </DataTemplate> 
     </dataForm:DataForm.EditTemplate> 
      </dataForm:DataForm> 

      <StackPanel Orientation="Vertical"> 
       <TextBlock FontWeight="Bold" FontSize="16" Text="Order Total/Payments" /> 
       <TextBlock > 
        <Run Text="Order Total:" /> 
        <Run Text="{Binding Data.OrderTotal, ElementName=orderDataSource}" /> 
       </TextBlock> 
       <TextBlock Text="Payments" /> 
       <TextBlock Text="{Binding Data.OrderPaymentItems, ElementName=orderDataSource}" /> 
       <ListBox ItemsSource="{Binding Data.OrderPayments, ElementName=orderDataSource}"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Amount}" /> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

      </StackPanel> 
     </StackPanel> 
    </StackPanel> 
+0

什么是触发你的DomainDataSource的负载?您只绑定到DomainDataSource *上的某个点上的集合*。如果这是在代码隐藏中完成的,请提供一些提示:) – 2010-09-08 15:39:29

+0

这是XAML中的声明。订单加载正常,所有其他字段都显示在表单上。只是这个子集合似乎并不真正包含项目,它似乎只有它所拥有的对象的名称。 – Josh 2010-09-08 15:49:15

+0

在这种情况下,你可以提供更多的XAML?绑定的问题在于,如果没有匹配的绑定元素,它们将不显示任何内容,因此如果列表为空,则可能会像打印错误一样简单。 – 2010-09-08 15:54:28

回答

1

WCF RIA服务默认情况下不包括子实体。我需要在Order对象的OrderPayments属性上放置[Include()]。现在就像魅力一样。

+0

这绝对是值得的+1。很高兴你发现它:) – 2010-09-09 07:01:15

+0

我有同样的问题在http://stackoverflow.com/questions/3764924/chart-control-not-showing-series即使我已经“包含”我的子实体作为[包括] [ Association(“Server_RamInfos”,“Name”,“ServerName”)] public List RamInfo {get;组; } 但{绑定RamInfo.Name}或.Value来作为空...任何想法?? – Sunit 2010-09-22 01:46:10