A ComboBox
позволяет пользователю выбирать из нескольких элементов.Он заполняет себя, перебирая все элементы в ItemsSource
и добавляя каждый элемент в Items
.
. Вы устанавливаете ItemsSource
в свойство, которое возвращает строку.Поскольку строку можно перебрать, ComboBox
заполняет себя элементами, полученными при ее переборе, поэтому строка «Mac» превращается в элементы «M», «a» и «c».
Вот почему вы видите то, что видите.Вопрос на самом деле: что вы ожидали увидеть (или что хотите увидеть) и почему?Какие элементы должен ComboBox
отображать?Если вы хотите, чтобы он отображал все имена категорий, которые появляются в DataTable
, вы можете сделать что-то вроде:
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=ItemsSource}"
и затем извлечь столбец IC_Name
из каждого элемента, используя DataTemplate
:
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding IC_Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
Обратите внимание, что при этом произойдут всевозможные неожиданные явления.Например, если только одна строка в таблице имеет значение «Foo» в качестве значения IC_Name
, в тот момент, когда пользователь выбирает какое-то другое значение для этой строки и таблица обновляется, значение «Foo» исчезнет из всехComboBox
es, что делает невозможным отмену этого изменения пользователем.Кроме того, если пять строк содержат «Foo», каждая ComboBox
будет отображать все пять экземпляров «Foo» в выпадающем списке.