Я собираюсь запутать следующий сценарий WPF DataGrid + ComboBox.
У меня есть набор классов, которые выглядят так:
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
}
Теперь мой желаемый результат - DataGrid, который показывает список строк типа Хаус, а в одном из столбцов - это ComboBox, который позволяет пользователю изменять значение House.HouseOwner.
В этом сценарии DataContext для сетки ViewModel.Houses, а для ComboBox я хочу, чтобы ItemsSource привязывался к ViewModel.Owners.
Возможно ли это? Я собираюсь с этим справиться... лучшее, что я смог сделать, это правильно получить привязку ItemsSource, однако ComboBox (внутри DataGridTemplateColumn) не показывает правильные значения для House.HouseOwner в каждой строке.
ПРИМЕЧАНИЕ. Если я выберу ComboBox из изображения и поставлю TextBlock в DataTemplate, я могу правильно видеть значения для каждой строки, но получение как ItemsSource, так и показание правильного значения в выборе не является работая для меня...
Внутри моего кода я установил DataContext в окне ViewModel и в сетке, для DataContext установлено значение ViewModel.Houses. Для всего, кроме этого combobox, он работает...
Мой XAML для столбца с нарушением выглядит следующим образом:
<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>
Порадовала бы какая-то помощь в этом... кажется, что требуется немного Voodoo, хотя...