Счетчик строки [] передается в 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 свойство не существует в строковом классе.

Другие вопросы по тегам