WPF DataGridTemplateColumn avec zone de liste déroulante de Liaison (pattern MVVM)

Je vais dingue avec la suite de WPF DataGrid+ComboBox scénario.

J'ai un ensemble de classes qui se ressemblent;

class Owner
{
    int ID { get; }
    string Name { get; }

    public override ToString()
    { 
        return this.Name;
    }
}

class House
{
    int ID { get; }
    Owner HouseOwner { get; set; }
}

class ViewModel
{
    ObservableCollection<Owner> Owners;
    ObservableCollection<House> Houses
}

Maintenant mon résultat souhaité est un DataGrid qui affiche une liste de lignes de type Maison, et dans l'une des colonnes, est une zone de liste déroulante qui permet à l'utilisateur de modifier la valeur de Maison.HouseOwner.

Dans ce scénario, le DataContext de la grille est ViewModel.Maisons et pour la zone de liste déroulante, je veux le ItemsSource d'être lié à ViewModel.Propriétaires.

Est-ce même possible? Je vais mentale avec ce... le meilleur que j'ai pu faire est de correctement obtenir le ItemsSource lié, cependant la zone de liste déroulante (à l'intérieur d'un DataGridTemplateColumn) n'est pas en montrant les valeurs correctes pour la Maison.HouseOwner dans chaque ligne.

REMARQUE: Si je prends de la zone de liste déroulante de la photo et de mettre un TextBlock dans le DataTemplate au lieu de cela, je peux voir correctement les valeurs de chaque ligne, mais avoir à la fois un ItemsSource ainsi que de montrer la valeur correcte dans la sélection ne fonctionne pas pour moi...

À l'intérieur de mon code derrière, j'ai mis le DataContext sur la Fenêtre de ViewModel et sur la grille, le DataContext est défini à ViewModel.Maisons. De tout, sauf de cette zone de liste déroulante, ça fonctionne...

Mon XAML de la délinquance de la colonne ressemble;

<DataGridTemplateColumn Header="HouseOwner">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Path=DataContext.Owners, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                        DisplayMemberPath="Name"
                        SelectedItem="{Binding HouseOwner, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                        SelectedValue="{Binding HouseOwner.ID, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Mode=OneWay}"
                        SelectedValuePath="ID" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Aimerais un peu d'aide sur ce coup... semble comme un peu de Vaudou est requis...

OriginalL'auteur RJ Lohan | 2011-08-17