WPF DataGridTemplateColumn с привязкой ComboBox (шаблон MVVM)

Я схожу с ума со следующим сценарием 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>

Хотел бы немного помочь с этим ... похоже, что требуется немного вуду ...

11
задан Yael 3 January 2017 в 20:36
поделиться