Modificación de una filaDeDefinitionCollection de la cuadrícula de ItemsPanel

Este es un seguimiento paraItemsControl no tiene hijos durante el constructor de MainWindow

Basado en la respuesta a la pregunta SO "WPF: organizar elementos de colección en una cuadrícula", tengo lo siguiente:

 <ItemsControl Name="itemsControl1" ItemsSource="{Binding MyItems}"> 
    <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
            <Grid Name="theGrid" ShowGridLines="True" /> 
        </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
        <Style TargetType="{x:Type FrameworkElement}"> 
            <Setter Property="Grid.Row" Value="{Binding RowIndex}" /> 
            <Setter Property="Grid.Column" Value="{Binding ColumnIndex}" /> 
        </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

Ahora, quiero establecer el número de filas y columnas de la cuadrícula en el código detrás: theGrid.RowDefinitions.Clear (); theGrid.ColumnDefinitions.Clear ();

        for (uint i = 0; i < theNumberOfRows; i++) 
            theGrid.RowDefinitions.Add(new RowDefinition()); 

        for (uint i = 0; i < theNumberOfCols; i++) 
            theGrid.ColumnDefinitions.Add(new ColumnDefinition()); 

Según MattHamiltona respuesta de @ allí, el ceñidor está disponible una vez que itemsControl1. ItemContainerGenerator.StatusChanged dispara con el estado de GeneratorStatus.ContainersGenerated.

Sin embargo, al intentar modificar la cuadrícula desde el controlador de eventos se genera una excepción "No se puede modificar 'RowDefinitionCollection' en estado de solo lectura".

Entonces, ¿cómo puedo configurar las colecciones de filas y columnas de la cuadrícula antes de que se muestre la ventana al usuario?

edita: Estoy modificando las propiedades de la cuadrícula de itemsControl1.ItemContainerGenerator.StatusChanged controlador de eventos:

        if (itemsControl1.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
            return;

        itemsControl1.ItemContainerGenerator.StatusChanged -= ItemContainerGeneratorStatusChanged;

        SetGridRowsAndColumns(InitialNumberOfRows, InitialMaxNumberOfCols);

Observe que SetGridRowsAndColumns (numberOfRows, numberOfCols) funciona más tarde, en respuesta a un clic de botón.

Respuestas a la pregunta(4)

Su respuesta a la pregunta