В моем приложении WPF есть функция импорта данных, которая импортирует данные из файла Excel в базу данных.
Чтобы пользователь мог сопоставить столбцы из своего файла Excel со столбцами в моей таблице базы данных, я отображаю список столбцов Excel в ComboBox
рядом с именами столбцов таблицы базы данных, позволяя пользователю выбрать соответствующий Excel колонка из ComboBox
.
Отображается в ListBox
, где каждый элемент содержит ComboBox
и TextBlock
.
ListBox
- это привязка данных к Dictionary<ColumnsClass, List<string>>
, где ColumnsClass
- простой объект, содержащий имена столбцов базы данных и другие подробности, а List<string>
- это просто список имен столбцов, найденных в файле Excel. Для отображения List<string>
в ComboBox
у меня есть DataTemplate, определенный следующим образом:
<DataTemplate x:Key="ColumnList">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="0" ItemsSource="{Binding Value, Mode=OneWay}">
</ComboBox>
<TextBlock Grid.Column="1" Text="{Binding Key, Mode=OneWay}"/>
</Grid>
</DataTemplate>
Как только пользователь сопоставляет столбцы Excel с именами столбцов базы данных и начинает импорт, мне нужно иметь возможность получить имя столбца базы данных и соответствующее значение 'ComboBox' SelectedIndex 'для каждого элемента в ListBox
, но каждый Элемент в ItemsSource на самом деле является KeyValuePair<ColumnsClass, List<string>>
, поэтому я не вижу, как получить значение 'ComboBox' SelectedIndex 'при итерации по коллекции ListBox.Items
...
Есть идеи?