Hallo und herzlich willkommen :)
Eigentlich nicht so schwierig. Ich hab dir mal ein kleines Beispiel gebaut. Dazu verwende ich Datenklassen für die Parents und die Children. Ebenfalls einen DataMock, welcher mir Testdaten erstellt:
Parentklasse:
public class Parent
{
private ChildCollection _children = new ChildCollection();
public string FirstName { get; set; }
public string LastName { get; set; }
public ChildCollection Children
{
get { return _children; }
}
}
public class ParentCollection : ObservableCollection<Parent>
{
}Child-Klasse:
public class Child
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class ChildCollection : ObservableCollection<Child>
{
}DataMock:
public static class DataMock
{
private static ParentCollection _parents;
public static ParentCollection GetParents()
{
if (_parents == null)
{
_parents = new ParentCollection();
Parent p1 = new Parent() { FirstName = "Norbert", LastName = "Eder" };
Parent p2 = new Parent() { FirstName = "Hugo", LastName = "Test" };
Child c1 = new Child() { FirstName = "Child", LastName = "Uno" };
Child c2 = new Child() { FirstName = "Child", LastName = "Due" };
p1.Children.Add(c1);
p2.Children.Add(c2);
_parents.Add(p1);
_parents.Add(p2);
}
return _parents;
}
}Damit wäre der Grundstock gelegt. Nun habe ich ein einfaches Fenster. Dieses enthält eine ListView, welcher das Ergebnis aus dem DataMock per ItemSource-Eigenschaft zugewiesen wird (bei mir jetzt einfach via Codebehind und nicht via XAML). Nun gibt es für die ListBoxItems ein eigenes DataTemplate, welches deren Aussehen definiert. In diesem DataTemplate wird eine weitere ListView definiert, welcher wiederrum ein DataTemplate für die Children zugewiesen wird:
<Window x:Class="DotNetGui.ListViewInListViewDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DotNetGui.ListViewInListViewDemo"
Title="Nested ListView Demo" Height="Auto" Width="Auto">
<Window.Resources>
<DataTemplate x:Key="ChildrenTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding LastName}" Grid.Column="0"/>
<TextBlock Text="{Binding FirstName}" Grid.Column="1"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="ParentTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding LastName}" Grid.Column="0" Grid.Row="0"/>
<TextBlock Text="{Binding FirstName}" Grid.Column="1" Grid.Row="0"/>
<ListView ItemsSource="{Binding Children}" ItemTemplate="{StaticResource ChildrenTemplate}" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" BorderThickness="0"/>
</Grid>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView x:Name="DataListView" ItemTemplate="{StaticResource ParentTemplate}"/>
</Grid>
</Window>Und so sieht das aus (zugegeben nicht sehr schön, aber das kann ja noch verfeinert werden):

Ich hoffe, das hilft dir soweit weiter.