WPF DataGridTemplateColumn com ligação ComboBox (padrão MVVM)
Estou enlouquecendo com o seguinte cenário WPF DataGrid + ComboBo
Tenho um conjunto de classes que se parece
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
}
Agora, meu resultado desejado é um DataGrid que mostra uma lista de linhas do tipoCas, e em uma das colunas, é uma ComboBox que permite ao usuário alterar o valor de House.HouseOwner.
Nesse cenário, o DataContext da grade é ViewModel.Houses e para a ComboBox, quero que o ItemsSource seja vinculado a ViewModel.Owner
Isso é possível? Estou ficando louco com isso ... o melhor que pude fazer é vincular corretamente o ItemsSource, no entanto, a ComboBox (dentro de um DataGridTemplateColumn) não está mostrando os valores corretos para House.HouseOwner em cada linh
NOTA: Se tirar a ComboBox da imagem e colocar um TextBlock no DataTemplate, posso ver corretamente os valores de cada linha, mas obter um ItemsSource e mostrar o valor correto na seleção não está funcionando para mim..
Dentro do meu código, configurei o DataContext na janela para ViewModel e na grade, o DataContext está definido como ViewModel.Houses. Para tudo, exceto esta caixa de combinação, está funcionando ...
Meu XAML para a coluna incorreta parece;
<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>
Gostaria de alguma ajuda sobre este ... parece que um pouco de vodu é necessário ...