grade wpf com colunas dinâmicas

Eu tenho uma coleção que desejo vincular a uma grade do WPF.

O problema que estou enfrentando é que o número de colunas é dinâmico e depende de uma coleção. Aqui está um simples simulado:

public interface IRows
{
    string Message{get;}
    IColumns[] Columns{get;}
}

public interface IColumns
{
    string Header {get;}
    AcknowledgementState AcknowledgementState{get;}
}

public interface IViewModel
{
    ObservableCollection<IRows> Rows {get;}
}

Eu quero meu modo de exibição para vincular à coleção de linhas, que contém uma coleção de colunas.

A coleção My Columns contém um enum que deve ser representado por uma imagem (1 de 3 possibilidades). Ele também contém uma propriedade Message que só deve ser exibida em uma coluna (estática e é apenas alguma informação de texto). Ele também contém uma string de cabeçalho que deve ser exibida como um cabeçalho para essa coluna.

Observe que o número de colunas é variável (no momento em que os cabeçalhos são definidos como Reconhecer, mas isso será alterado para representar dados dinâmicos).

Atualização: Isto é depois de implementar sugestões de Rachel

    <ItemsControl
 ItemsSource="{Binding Items, Converter={StaticResource PresentationConverter}}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <Grid ShowGridLines="true"
         local:GridHelpers.RowCount="{Binding RowCount}"
         local:GridHelpers.ColumnCount="{Binding ColumnCount}" />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemContainerStyle>
    <Style>
      <Setter Property="Grid.Row" Value="{Binding RowIndex}"/>
      <Setter Property="Grid.Column" Value="{Binding ColumnIndex}"/>
    </Style>
  </ItemsControl.ItemContainerStyle>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <ContentControl Content="{Binding}">
        <ContentControl.Resources>
          <DataTemplate DataType="{x:Type UI:MessageEntity}">
            <TextBox Text="{Binding Message}"></TextBox>
          </DataTemplate>
          <DataTemplate DataType="{x:Type UI:StateEntity}">
            <TextBox Text="{Binding State}"></TextBox>
          </DataTemplate>
        </ContentControl.Resources>
      </ContentControl>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

Isso quase me dá o que eu quero agora. Eu só estou preso com o que devo fazer para os cabeçalhos. Todas as sugestões são bem vindas.

questionAnswers(4)

yourAnswerToTheQuestion