DataGridTemplateColumns, AutoGenerateColumns = true y enlace a un DataTable

Estoy luchando con una confluencia de problemas.

Tengo un conjunto de datos dinámicos que ensamblé manualmente en un DataTable.Tengo que generar automáticamente las columnas ya que los datos no son estáticos.Necesito vincular el ItemsSource de un cuadro combinado a una colección observable definida en cada celda.

Aunque pensé que sería fácil, el ComboBox no puede ver el DataItem en el DataView, sino que trata de vincularse al DataView directamente.

He reunido un proyecto de muestra aquí:

https://github.com/5flags/DataGridBindingIssue

Ahora, obviamente, está ideado para demostrar el problema. No puedo cambiar la estructura de datos en este momento, por lo que cualquier solución debe hacerse en el XAML.

Para ver los problemas, use Snoop (o equivalente) para ver los errores de enlace en los ComboBoxes.

El DataGrid está configurado de esta manera:

<DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn" CanUserAddRows="False" x:Name="TheDataGrid" ItemsSource="{Binding Data}">
    <DataGrid.Resources>
        <DataTemplate x:Key="dataItemCellTemplate">
            <ComboBox SelectedValue="{Binding Path=SelectedOption, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  ItemsSource="{Binding Options}"/>
        </DataTemplate>
    </DataGrid.Resources>
</DataGrid>

Y el controlador de eventos para la autogeneración es:

private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(string))
    {
        var col = new DataGridTextColumn {Binding = new Binding(e.PropertyName), Header = e.PropertyName};
        e.Column = col;
    }
    else if (e.PropertyType == typeof(DataItem))
    {
        var col = new DataGridTemplateColumn
        {
            CellTemplate = (DataTemplate) TheDataGrid.FindResource("dataItemCellTemplate"),
            CellEditingTemplate = (DataTemplate)TheDataGrid.FindResource("dataItemCellTemplate"),
            Header = e.PropertyName
        };
        e.Column = col;
    }
}

El error de enlace en el combo es:

System.Windows.Data Error: 40: Error en la ruta de BindingExpression: no se encuentra la propiedad 'Opciones' en 'objeto' '' DataRowView '(HashCode = 22264221)'. BindingExpression: Path = Options; DataItem = 'DataRowView' (HashCode = 22264221); el elemento de destino es 'ComboBox' (Nombre = ''); la propiedad de destino es 'ItemsSource' (tipo 'IEnumerable')

System.Windows.Data Error: 40: Error de ruta de BindingExpression: la propiedad 'SelectedOption' no se encuentra en 'objeto' '' DataRowView '(HashCode = 22264221)'. BindingExpression: Path = SelectedOption; DataItem = 'DataRowView' (HashCode = 22264221); el elemento de destino es 'ComboBox' (Nombre = ''); la propiedad de destino es 'SelectedValue' (tipo 'Objeto')

Respuestas a la pregunta(3)

Su respuesta a la pregunta