Binding ItemsSource de un ComboBoxColumn en WPF DataGrid

Tengo dos clases de Modelo simples y un ViewModel ...

public class GridItem
{
    public string Name { get; set; }
    public int CompanyID { get; set; }
}

public class CompanyItem
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class ViewModel
{
    public ViewModel()
    {
        GridItems = new ObservableCollection<GridItem>() {
            new GridItem() { Name = "Jim", CompanyID = 1 } };

        CompanyItems = new ObservableCollection<CompanyItem>() {
            new CompanyItem() { ID = 1, Name = "Company 1" },
            new CompanyItem() { ID = 2, Name = "Company 2" } };
    }

    public ObservableCollection<GridItem> GridItems { get; set; }
    public ObservableCollection<CompanyItem> CompanyItems { get; set; }
}

... y una ventana simple:

<Window x:Class="DataGridComboBoxColumnApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding GridItems}" >
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Name}" />
                <DataGridComboBoxColumn ItemsSource="{Binding CompanyItems}"
                                    DisplayMemberPath="Name"
                                    SelectedValuePath="ID"
                                    SelectedValueBinding="{Binding CompanyID}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

The ViewModel está configurado en @ MainWindow'DataContext en App.xaml.cs:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        MainWindow window = new MainWindow();
        ViewModel viewModel = new ViewModel();

        window.DataContext = viewModel;
        window.Show();
    }
}

omo pueden ver, configuré laItemsSource de DataGrid aGridItems colección de ViewModel. Esta parte funciona, se muestra la única línea de cuadrícula con el nombre "Jim".

También quiero establecer elItemsSource del ComboBox en cada fila a laCompanyItems colección de ViewModel. Esta parte no funciona: el cuadro combinado permanece vacío y en la ventana de salida del depurador veo un mensaje de error:

System.Windows.Data Error: 2: No se puede encontrar FrameworkElement o FrameworkContentElement para el elemento de destino. BindingExpression: Path = CompanyItems; DataItem = nulo; el elemento de destino es 'DataGridComboBoxColumn' (HashCode = 28633162); la propiedad de destino es 'ItemsSource' (tipo 'IEnumerable')

Creo que WPF esperaCompanyItems para ser una propiedad deGridItem que no es el caso, y esa es la razón por la cual falla el enlace.

Ya he intentado trabajar con unaRelativeSource yAncestorType al igual que

<DataGridComboBoxColumn ItemsSource="{Binding CompanyItems, 
    RelativeSource={RelativeSource Mode=FindAncestor,
                                   AncestorType={x:Type Window}}}"
                        DisplayMemberPath="Name"
                        SelectedValuePath="ID"
                        SelectedValueBinding="{Binding CompanyID}" />

Pero eso me da otro error en la salida del depurador:

System.Windows.Data Error: 4: No se puede encontrar el origen del enlace con la referencia 'RelativeSource FindAncestor, AncestorType =' System.Windows.Window ', AncestorLevel =' 1 ''. BindingExpression: Path = CompanyItems; DataItem = nulo; el elemento de destino es 'DataGridComboBoxColumn' (HashCode = 1150788); la propiedad de destino es 'ItemsSource' (tipo 'IEnumerable')

Pregunta: ¿Cómo puedo vincular ItemsSource de DataGridComboBoxColumn a la colección CompanyItems de ViewModel? ¿Es posible en absoluto?

¡Gracias de antemano por la ayuda!

Respuestas a la pregunta(7)

Su respuesta a la pregunta