Проблема вызвана тем, что строки в сетке данных виртуализируются. Поэтому элементы, не отображаемые на экране, не нужно рисовать (или рассчитывать их размеры), пока они не должны отображаться.
Вы можете отключить виртуализацию следующим образом:
<DataGrid VirtualizingStackPanel.IsVirtualizing="False" HorizontalScrollBarVisibility="Hidden">
Обратите внимание, однако, что это может привести к тому, что ваша таблица данных будет загружаться медленнее, если у вас много элементов из-за того, что все элементы будут «нарисованы», даже если они не отображаются на экране.