Я просто собираюсь сделать предположение на основе вашего имени, что вы делаете это в wpf.
В вашем коде у вас была правильная идея для Модели, но (предполагая, что я понимаю, к чему вы стремитесь), вы немного сбились с пути с ViewModel. Поскольку класс GrandParent имеет коллекцию Parents, а Parents - коллекцию Children, в вашей ViewModel вам понадобится только коллекция GrandParrents в вашей ViewModel. так что ваша ViewModel будет ближе к:
class ViewModel
{
ICollection<GrandParent> Grents;
}
Как показывает ваш вид, самый простой способ, который я знаю, - это шаблоны данных. Вам придется использовать поле со списком в вашей сетке, но вы можете отформатировать поле со списком, как бы вы ни хотели получить результат, который вы ищете, это слава WPF. во всяком случае, я сделал простой пример здесь:
<Window.Resources>
<local:ViewModel x:Key="ViewModelDataSource" d:IsDataSource="True"/>
<DataTemplate x:Key="GrandParents_Data_Template">
<StackPanel>
<TextBlock Text="{Binding name}"/>
<ListBox ItemsSource="{Binding ParentCollection}" ItemTemplate="{DynamicResource Parents_Data_Template}"/>
</Window.Resources>
Надеюсь, это поможет вам, по крайней мере, двигаться в правильном направлении. Дайте мне знать, если у вас есть еще вопросы.