Данные связывают свойство UniformGrid.Columns:
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="10" Columns="{Binding ColumnCount}" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Затем обновите ColumnCount в вашем обработчике SizeChanged.
Предполагается, что вы можете определить ColumnCount в DataContext ListBox. Если это нежелательно, вы можете легко разместить число столбцов в каком-либо другом привязываемом месте, например, определив присоединенное свойство в ListBox, связав его и установив значение присоединенного свойства в обработчике SizeChanged. В любом случае, ключ заключается в том, чтобы связать свойство Columns, а не воссоздавать весь ItemsPanelTemplate в коде.