В ListView есть прокрутка.
Помещение списка в панель, где он не имеет расчетной высоты, может вызвать проблемы.
Я предлагаю вам поставить сетку внутри каждого ряда сетки.
Дайте ему два ряда.
Поместите текстовый блок в первый и ваш список просмотра второй.
Вот упрощенная версия вашей разметки, которая иллюстрирует мое предложение.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="First List"/>
<ListView ItemsSource="{Binding Letters}" Grid.Row="1"/>
</Grid>
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="Second List"/>
<ListView ItemsSource="{Binding Letters}" Grid.Row="1"/>
</Grid>
</Grid>
Текстовые блоки и заголовки списка остаются видимыми, а вертикальные полосы прокрутки отображаются для содержимого каждого списка, если они не подходят.
Очевидно, у меня нет заголовков в этой версии.