Счетчик строки [] передается в ComboBox, но значение строки [] не
Я использовал метод,
public static string[] getMyStrings()
и передал его в поле со списком, как:
cmbMyBox.itemsSource = getMyStrings(). //(more detail below)
отладчик показывает, что строки были добавлены в выпадающий список, но когда я смотрю в выпадающий список, там есть количество записей, но они пустые. Кто-нибудь знает, что я делаю не так?
мой список устройств:
public static string[] GetMIDIInDevices()
{
//get list of devices
string[] returnDevices = new string[MidiIn.NumberOfDevices];
// Get the product name for each device found
for (int device = 0; device < MidiIn.NumberOfDevices; device++)
{
returnDevices[device] = MidiIn.DeviceInfo(device).ProductName;
}
return returnDevices;
}
Простой код для отображения его в моем главном окне в WPF:
public MainWindow()
{
InitializeComponent();
cmbMidiDropdown.ItemsSource = NAudioMIDI.GetMIDIInDevices();
//LoadMidiInDevicesIntoComboBox();
}
вот XAML:
<TabItem Header="MIDI Settings" Name="tabMidiSettings" Background="DarkGoldenrod">
<Grid Background="Honeydew">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10" />
<ColumnDefinition Width="758" />
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Right" Margin="0,141,146,0" Name="cmbMidiDropdown" VerticalAlignment="Top" Width="312" ItemsSource="{Binding}" DisplayMemberPath="Name" />
<Label Content="Select Midi Input device" Grid.Column="1" Height="28" HorizontalAlignment="Left" Margin="143,141,0,0" Name="label1" VerticalAlignment="Top" />
</Grid>
</TabItem>
ВЫХОД ОТ ОТЛАДКИ:
GetMIDIInDevices ()
- returnDevices {string[3]} string[]
[0] "MIDISPORT 2x2 In A" string
[1] "MIDISPORT 2x2 In B" string
[2] "Turtle Beach USB MIDI 1x1" string
returnDevices[device] "Turtle Beach USB MIDI 1x1" string
cmbMIDIDropdown
+ cmbMidiDropdown {System.Windows.Controls.ComboBox Items.Count:3}
- cmbMidiDropdown.ItemsSource {string[3]}
- [string[]] {string[3]} string[]
[0] "MIDISPORT 2x2 In A" string
[1] "MIDISPORT 2x2 In B" string
[2] "Turtle Beach USB MIDI 1x1" string
2 ответа
Вы устанавливаете ItemsSource в XAML, а DisplayMemberPath
также. Когда вы устанавливаете ItemsSource в коде, вы не изменяете DisplayMemberPath, поэтому выпадающий список пытается вызвать каждый объект .Name
имущество. String
не имеет .Name
, так что вы получаете заготовки. Удалить ItemsSource
а также DisplayMemberPath
от вашего xaml, и вы должны увидеть значения, которые вы ожидаете.
Попробуй это...
cmbMidiDropdown.DataContext = NAudioMIDI.GetMIDIInDevices();
Вы устанавливаете свой ItemsSource
унаследовать DataContext
установив {Binding}
на ItemsSource
имущество. При этом просто устанавливая DataContext
вашей ComboBox
к списку строк позволит ComboxBox
заселить соответственно.
Кроме того, настройка вашего DisplayMemberPath
не требуется, так как вы устанавливаете ItemsSource
как список строк по сравнению со сложными объектами и Name
свойство не существует в строковом классе.