Oft müssen zu Parent-Objekten auch die Kindelemente angezeigt werden. Nachfolgend findet sich ein Style inkl. Controltemplate, der veranschaulicht, wie für einen Eintrag in einer ListView auch die Kind-Elemente angezeigt werden können. Zum besseren Verständnis: Hier wird mit Company-Objekten gearbeitet, welche eine Auflistung für Aufträge (Oders) enthält.
<Window.Resources>
<Style TargetType="{x:Type ListViewItem}" x:Key="CompanyItemStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<StackPanel>
<TextBlock Background="LightBlue" Text="Company"/>
<GridViewRowPresenter Content="{TemplateBinding Content}" Columns="{TemplateBinding GridView.ColumnCollection}"/>
<StackPanel DataContext="{Binding Orders}" Margin="40 0 0 0">
<TextBlock Background="LightYellow" Text="Orders"/>
<ListView ItemsSource="{Binding .}">
<ListView.View>
<GridView>
<GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="InvoiceId" DisplayMemberBinding="{Binding InvoiceId}"/>
<GridViewColumn Header="InvoiceFileName" DisplayMemberBinding="{Binding InvoiceFileName}"/>
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<DockPanel>
<ListView ItemsSource="{Binding Path=.Companies}" ItemContainerStyle="{StaticResource CompanyItemStyle}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Contact" DisplayMemberBinding="{Binding Contact}"/>
<GridViewColumn Header="Telephone" DisplayMemberBinding="{Binding Telephone}"/>
<GridViewColumn Header="Address" DisplayMemberBinding="{Binding Address}"/>
</GridView>
</ListView.View>
</ListView>
</DockPanel>
Das Ergebnis sieht ohne einen guten Designer so aus:
