基本上我拥有的是ItemsControl,我设置了ItemsSource =" {Binding = Invoice.Jobs"。在那个乔布斯系列中,我还有另外两个名为" Shipments"和"费用"。我设置它,以便ItemsControl.Resources填充DataTemplates,确定我将用于每个作业,发货或费用的CustomControl的类型。他们通过每个的DataType来确定这一点。所以ItemsControl应该一个接一个地抽出所有这些控件,看起来像发票中的行项目。一组订单项将是: -工作 -装船 -Fee
然后,如果有更多的工作或其他工作,它可能看起来像 -工作 -装船 -装船 -费用 -工作 -Shipment
<ItemsControl ItemsSource="{Binding Invoice.Jobs}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type preInvoice:BatchInvoiceJobDto }">
<control:JobLineItem>
</control:JobLineItem>
</DataTemplate>
<DataTemplate DataType="{x:Type preInvoice:BatchInvoiceShipmentDto}">
<control:ShipmentLineItem>
</control:ShipmentLineItem>
</DataTemplate>
<DataTemplate DataType="{x:Type preInvoice:BatchInvoiceFeeDto }">
<control:FeeLineItem>
</control:FeeLineItem>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
Jobs类基本上是这样的:
public class Invoice
{
public IEnumerable<BatchInvoiceJobDto> Jobs {get; set;}
}
public class BatchInvoiceJobDto
{
public IEnumerable<BatchInvoiceShipmentDto> Shipments {get; set;}
public IEnumerable<BatchInvoiceFeeDto> Fees{get; set;}
}
答案 0 :(得分:0)
为了遍历Invoice.Jobs集合中的集合,我建议使用嵌套的ItemsControl
控件。
<强> XAML:强>
<ItemsControl ItemsSource="{Binding Invoice.Jobs}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<ItemsControl ItemsSource="{Binding Shipments}">
<ItemsControl.ItemTemplate>
<DataTemplate>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Fees}">
<ItemsControl.ItemTemplate>
<DataTemplate>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如果您要为每个ItemsControl.ItemsPanel
将StackPanel
设置为ItemsControl
,那么它应显示为作业后面的行 - &gt;发货 - &gt;在Invoice.Jobs中为每件商品订购费用。
注意:强>
您可能希望将属性类型从IEnumerable
更改为ObservableCollection
,以便更新并正确显示。