0

Всем привет. Есть некая ViewModel которая биндится к DataGrid.

class MainViewModel
{
    public List<Person> People {get; set}
}

 class Person
 {
      public string Name {get; set;}

      public List<Car> Cars {get; set;}
  }

  class Car
  {
      public string Name {get; set;}
  }

Далее я пытаюсь эту модель прибандить к dataGrid. Поле типа DataGridTextColumn бандится без проблем. Но вот поле DataGridComboBoxColumn никак не заполняется данными. Как его привязать?

<DataGrid Name="dgPerson" 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding People }" >

   <DataGridTextColumn Header="Имя" 
                       Binding="{Binding Path=Name}"> 
   </DataGridTextColumn>

   <!-- Это поле НЕ бандится.  В нем я хочу чтобы отображался 
         список машин человека  -->    
   <DataGridComboBoxColumn Header="Машины" 
                           Binding="{Binding Path=Cars}"  
                           DisplayMemberPath="Name">
   </DataGridComboBoxColumn>
</DataGrid>
3
  • 1) А зачем вам DisplayMemberPath="Name"? 2) В VM должны быть dependency property (ну или быть реализовано INotifyPropertyChanged).
    – VladD
    5 авг 2014 в 11:39
  • Делал по аналогии ComboBox. Там такая привязка работает.
    – sp7
    5 авг 2014 в 11:41
  • Т.е. чего я хочу добиться. Чтобы в каждой строке грида отображался конкретный пользователь, а в поле DataGridComboBoxColumn этого грида отображался список машин данного пользователя.
    – sp7
    5 авг 2014 в 11:54

1 ответ 1

5

Из документации:

To populate the drop-down list, first set the ItemsSource property for the ComboBox by using one of the following options:

Поскольку для вас ни один из трёх вариантов не подходит, применить DataGridComboBoxColumn не получится.

Попробуйте так:

<DataGridTemplateColumn Header="Машины">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Cars}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
3
  • Спасибо за ответ. Но хотелось все-таки сделать привязку к DataGridTemplateColumn. Как-то она все-таки делается, но в найденных мной примерах не разобрался.
    – sp7
    5 авг 2014 в 18:48
  • @sp7: Я привёл ссылку на документацию, которая говорит, что использовать DataGridComboBoxColumn в вашем случае не стоит. Если уж разработчик так говорит, лучше послушаться: кто знает, какие ещё проблемы возникнут? Официальная документация всяко заруливает примеры из гугла.
    – VladD
    5 авг 2014 в 20:23
  • В общем решил оставить в покое DataGridTemplateColumn и оформить пользовательский интерфейс немного по другому.
    – sp7
    6 авг 2014 в 20:40

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.