2010-09-08 65 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