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