2015-07-09 86 views
1

我有一些嵌套控件似乎不能正確地繼承綁定......或者它可能完全是其他的東西。我對WPF有點新鮮。ListBox中的DataGrid ItemTemplate不繼承綁定?

我已經有一個綁定到ListBox的對象的ObservableCollection,並且在頂層,這似乎正在工作,因爲按預期爲集合中的每個項目添加了一行。問題是,我需要把列表框的ItemTemplate內的DataGrid和...

DataGrids with headers only

我得到的都是頭部,這是我手工指定。沒有來自綁定對象的數據。

我可能只是做了一些愚蠢的事情。下面的代碼,稍作簡化:

XAML:

<ListBox x:Name="ReportListBox" Margin="10,10,10,10" Grid.Row="1" ItemsSource="{Binding Path=SummaryTotals, Mode=OneWay}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <DataGrid> 
         <DataGrid.Columns> 
          <DataGridTextColumn Binding="{Binding Date, StringFormat=\{0:MM/dd/yyyy\}}" Header="Date"/> 
          <DataGridTextColumn Binding="{Binding GrossRevenue}" Header="Gross Revenue" /> 
          <DataGridTextColumn Binding="{Binding OurRevenue}" Header="Our Revenue" /> 
          <DataGridTextColumn Binding="{Binding Cost}" Header="Cost" /> 
          <DataGridTextColumn Binding="{Binding Profit}" Header="Profit" /> 
          <DataGridTextColumn Binding="{Binding Roi}" Header="ROI" /> 
          <DataGridTextColumn Binding="{Binding Rpc}" Header="RPC" /> 
          <DataGridTextColumn Binding="{Binding Clicks}" Header="Clicks" /> 
          <DataGridTextColumn Binding="{Binding Conversions}" Header="Conversions" /> 
          <DataGridTextColumn Binding="{Binding ConversionRate}" Header="Conversion Rate" /> 
         </DataGrid.Columns> 
        </DataGrid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

C#:

public class SummaryTotalRecord 
     { 
      public DateTime Date { get; set; } 
      public decimal Cost { get { return Google.Cost + Ypa.PureLocal.Cost + Ypa.BuyerPricer.Cost; } } 
      public decimal GrossRevenue { get { return Google.GrossRevenue + Ypa.PureLocal.GrossRevenue + Ypa.BuyerPricer.GrossRevenue; } } 
      public decimal OurRevenue { get { return Google.OurRevenue + Ypa.PureLocal.OurRevenue + Ypa.BuyerPricer.OurRevenue; } } 
      public decimal Roi { get { return (Google.Roi + Ypa.PureLocal.Roi + Ypa.BuyerPricer.Roi)/3; } } 
      public decimal ConversionRate { get { return (Google.ConversionRate + Ypa.PureLocal.ConversionRate + Ypa.BuyerPricer.ConversionRate)/3; } } 
      public decimal Profit { get { return Google.Profit + Ypa.PureLocal.Profit + Ypa.BuyerPricer.Profit; } } 
      public decimal Rpc { get { return (Google.Rpc + Ypa.PureLocal.Rpc + Ypa.BuyerPricer.Rpc)/3; } } 
      public long Clicks { get { return Google.Clicks + Ypa.PureLocal.Clicks + Ypa.BuyerPricer.Clicks; } } 
      public long Conversions { get { return Google.Conversions + Ypa.PureLocal.Conversions + Ypa.BuyerPricer.Conversions; } } 
      // ... plus a bunch of other properties I haven't touched yet 
     } 

public ObservableCollection<SummaryTotalRecord> SummaryTotals = new ObservableCollection<SummaryTotalRecord>(); 

我發現和你有類似的問題,接受修復似乎像

RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}} 

但都沒有,也沒有x:Type ListItem似乎產生任何結果的差異。

更新:嘗試一種結果類似的新方法。我已經改變了我的類返回一個名爲TableData的DataTable和修改,像這樣的XAML:

<Expander IsExpanded="True" Header="{Binding Date, StringFormat=\{0:MM/dd/yyyy\}}"> 
         <DataGrid DataContext="{Binding Path=TableData}" AutoGenerateColumns="True" /> 
        </Expander> 

類似的結果:

Expanders can access but DataGrids can't?

擴展器可以訪問Date財產,但在DataGrid它包含無權訪問TableData

+0

'x:Type ListBoxItem'如何? –

+0

好的電話,但沒有骰子。我試圖將其添加到數據網格的綁定屬性中,並且當這不起作用時,單個列仍然只能看到標題。 –

+0

您可以粘貼您在輸出窗口中獲得的每個綁定錯誤之一嗎? –

回答

1

我結束了添加新的屬性的綁定對象:

公衆的DataTable資料表 { 得到 {VAR 表=新的DataTable();

   table.Columns.Add("Date", typeof (string)); 
       table.Columns.Add("Gross Revenue", typeof(string)); 
       table.Columns.Add("Our Revenue", typeof(string)); 
       table.Columns.Add("Cost", typeof(string)); 
       table.Columns.Add("Profit", typeof(string)); 
       table.Columns.Add("ROI", typeof(string)); 
       table.Columns.Add("RPC", typeof(string)); 
       table.Columns.Add("Clicks", typeof(long)); 
       table.Columns.Add("Conversions", typeof(long)); 
       table.Columns.Add("Conversion Rate", typeof(string)); 

       table.Rows.Add(
        Date.ToString("MM/dd/yyyy"), 
        GrossRevenue.ToString("C"), 
        OurRevenue.ToString("C"), 
        Cost.ToString("C"), 
        Profit.ToString("C"), 
        Roi.ToString("P"), 
        Rpc.ToString("P"), 
        Clicks, 
        Conversions, 
        ConversionRate.ToString("P") 
       ); 

       return table; 
      } 
     } 

在該點以下XAML工作:

<DataGrid ItemsSource="{Binding Path=TableData}" AutoGenerateColumns="True" 
CanUserAddRows="False" /> 

我仍然不知道爲什麼原來的代碼失敗,此代碼的工作。

0

爲什麼網格是空的是非常有意義的;它不受任何收藏的約束。如果沒有指定源,那麼沒有,並且網格將是空的。這不是可以被綁定引擎推理的東西。