HierarchicalDataTemplate で TreeView を使用します。
ただし、モデルに INotifyPropertyChanged を実装しないと、プロパティの変更時にバインディングが更新されないことに注意してください。また、リストを ObservableCollections に置き換えないと、リストにアイテムを追加してもビューが更新されません。
このようなものが機能するはずです。最初にテンプレートを定義します。
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Parent}" ItemsSource="{Binding Childs}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:Child}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock>, </TextBlock>
<TextBlock Text="{Binding Age}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
次に、次のように TreeView でそれらを使用できます (Parents が TreeView の DataContext のプロパティであると仮定します)。
<TreeView ItemsSource="{Binding Parents}"/>
TreeView が必要ない場合は、ListView を使用して簡単にリストを作成し、DataTemplates を次のように変更できます。
<DataTemplate DataType="{x:Type local:Parent}">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<ListView ItemsSource="{Binding Childs}"/>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Child}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock>, </TextBlock>
<TextBlock Text="{Binding Age}"/>
</StackPanel>
</DataTemplate>
そして、次のようにバインドできます。
<ListView ItemsSource="{Binding Parents}"/>
注: すぐに使えるように見えるので、スタイルを少しいじる必要があるかもしれません。少なくとも、子の ListView (親の DataTemplate で定義されているもの) をインデントして、その境界線を取り除きたいと思うでしょう。
また、注意: 名前と年齢のために複数の TextBlocks をレイアウトするための StackPanel も理想的ではありませんが、迅速で汚れています。別の方法で処理したい場合があります。(マルチ) コンバーターを使用してフォーマットしたり、StringFormat を使用したり、表示のためだけにモデルに別のプロパティを追加したり、子クラスで ToString をオーバーライドしたりすることもできます。
別の編集
DataGrid を使用した簡単な (そして醜い) 例:
<DataGrid ItemsSource="{Binding Parents}" AutoGenerateColumns="False">
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Childs}"/>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
これにより、行の詳細テンプレートを使用して、データ グリッドがデータ グリッド内に配置されます。行をクリックすると、子が行の詳細として表示されます。詳細を常に利用できるようにする場合は、RowDetailsTemplate を削除し、DataGridTextColumn を DataGridTemplateColumn に置き換えてから、データのテンプレートを定義します。