cheerfulatlas
@cheerfulatlas

Использование Combobox в WPF DataGrid со связью по внешнему ключу?

Здравствуйте.
Возникла задача написать приложение для заполнения семи таблиц реляционной БД.
В качестве инструментов были выбраны MSSQL, WPF, Entity Framework.

Примером была взята статья.
Я убрал функционал поиска и группировку, создал интерфейс для семи таблиц (семь DataGrid), добавил коллекции во ViewModel.
Для примера будет достаточно двух таблиц.
private launchesEntities _dataContext;

        public ObservableCollection<spacecraft> Spacecrafts { get; private set; }
        public ObservableCollection<manufacturer> Manufacturers { get; private set; }

        public MainWindowViewModel()
        {
            _dataContext = new launchesEntities();            
           
            Manufacturers = new ObservableCollection<manufacturer>(_dataContext.manufacturers);
            Spacecrafts = new ObservableCollection<spacecraft>(_dataContext.spacecrafts);
        
            Save = new ActionCommand(SaveChanges) { IsExecutable = true };            
        }

Немного интерфейса:
<DataGrid ItemsSource="{Binding Manufacturers}"
              AutoGenerateColumns="False"
              Grid.Row="4" Grid.Column="1" Margin="5"
              RowDetailsVisibilityMode="VisibleWhenSelected">
      <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding name}" Header="Name" Width="3*"/>
        <DataGridTextColumn Binding="{Binding country}" Header="Country" Width="2*"/>
      </DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding Spacecrafts}"
              AutoGenerateColumns="False"
              Grid.Row="8" Grid.Column="1" Margin="5"
              RowDetailsVisibilityMode="VisibleWhenSelected">
      <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding name}" Header="Name" Width="3*"/>
        <!-- Здесь необходим Combobox -->
      </DataGrid.Columns>
</DataGrid>

Теперь мне необходимо разместить во второй колонке DataGrid, относящегося к Spacecrafts, выпадающие списки, позволяющие выбрать производителя, причем необходимо использовать связь по внешнему ключу, и показывать поле name, а изменять поле manufacturer_id.

Модель сущностей EF:
y5ij.png

Я находил несколько примеров для решения подобной задачи, но моих ограниченных фундаментальных знаний недостаточно для использования в текущем контексте, XAML не является довольно очевидным инструментом.

Спасибо за помощь.
  • Вопрос задан
  • 11812 просмотров
Решения вопроса 2
@EasyX
Попробуй вот так:

<DataGridComboBoxColumn ItemsSource="{Binding Source=Manufacturers}" DisplayMemberPath="name" SelectedValuePath="id" SelectedValueBinding="{Binding manufacturer_id}" Header="Manufacturer" Width="*" />
Ответ написан
@Gilga
ComboBox справляет. Левый элемент - ListView.
spoiler
x7jo.jpg
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@EasyX
Ваш вариант - это вариация на тему ответа, предложенного мной, только вместо DataGridComboBoxColumn, - шаблон с ComboBox.
Скажите, последний вариант не заработал?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽