Obtenir la valeur sélectionnée de la zone de liste déroulante en C # WPF

Je viens de commencer à utiliser des formulaires WPF au lieu des formulaires Windows Forms. Dans un formulaire Windows Forms, je pourrais simplement faire:

ComboBox.SelectedValue.toString();

Et cela fonctionnerait bien.

Comment puis-je faire cela dans WPF? Il ne semble pas avoir l'option.

49
demandé sur Peter Mortensen 2010-12-04 05:26:21

20 réponses

Eh bien.. J'ai trouvé une solution plus simple.

String s = comboBox1.Text;

De cette façon, j'obtiens la valeur sélectionnée en tant que chaîne.

72
répondu Moile 2012-10-19 21:26:43

Je l'ai trouvé un peu étrange par rapport aux anciennes formes WF:

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();
68
répondu Boardy 2018-04-19 13:41:48

Assurez-vous d'avoir défini le nom de votre ComboBox dans votre fichier XAML:

<ComboBox Height="23" Name="comboBox" />

Dans votre code, vous pouvez accéder à l'élément sélectionné en utilisant SelectedItem propriété:

MessageBox.Show(comboBox.SelectedItem.ToString());
9
répondu The Smallest 2017-02-15 08:43:26

Mon XAML est comme ci-dessous:

<ComboBox Grid.Row="2" Grid.Column="1" Height="25" Width="200" SelectedIndex="0" Name="cmbDeviceDefinitionId">
    <ComboBoxItem Content="United States" Name="US"></ComboBoxItem>
    <ComboBoxItem Content="European Union" Name="EU"></ComboBoxItem>
    <ComboBoxItem Content="Asia Pacific" Name="AP"></ComboBoxItem>
</ComboBox>

Le contenu s'affiche sous forme de texte et le nom de la liste déroulante WPF. Pour obtenir le nom de l'élément sélectionné, j'ai suivi cette ligne de code:

ComboBoxItem ComboItem = (ComboBoxItem)cmbDeviceDefinitionId.SelectedItem;
string name = ComboItem.Name;

Pour obtenir le texte sélectionné d'une liste déroulante WPF:

string name = cmbDeviceDefinitionId.SelectionBoxItem.ToString();
7
répondu Kuntal Ghosh 2018-04-19 14:03:32

Que diriez-vous de ceux-ci:

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();
6
répondu nrkz 2015-06-25 12:27:45

Cela dépend de ce que vous avez lié à votre ComboBox. Si vous avez lié un objet appelé MyObject, et que vous avez, disons, une propriété appelée Name, procédez comme suit:

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;
4
répondu Benny 2010-12-04 02:31:18

Résoudre ce problème est simple. Tout ce que j'ai fait était d'ajouter "SelectedValuePath" à mon code XAML et de le lier à ma propriété de modèle que je veux retourner avec la liste déroulante.

<ComboBox SelectedValuePath="_Department"
          DisplayMemberPath="_Department"
          Height="23"
          HorizontalAlignment="Left"
          ItemsSource="{Binding}"
          Margin="-58,1,0,5"
          Name="_DepartmentComboBox"
          VerticalAlignment="Center"
          Width="268"/>
3
répondu Myron William 2018-04-19 13:45:16

Cela dépend en grande partie de la façon dont la boîte est remplie. Si cela est fait en attachant un DataTable (ou une autre collection) au ItemsSource, Vous pouvez trouver attacher un gestionnaire d'événements SelectionChanged à votre boîte dans le XAML, puis l'utiliser dans le code-behind utile:

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();
}

J'ai vu 2 autres réponses ici qui avaient différentes parties de cela-l'une avait ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();, qui semble similaire mais ne jette pas la boîte à un DataRowView, quelque chose que j'ai trouvé que je devais faire, et un autre: ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();, utilisé .SelectedItem au lieu de .Items.GetItemAt(comboBox1.SelectedIndex). Que cela aurait pu fonctionner, mais ce que j'ai réglé était en fait la combinaison des deux que j'ai écrit ci-dessus, et je ne me souviens pas pourquoi j'ai évité .SelectedItem sauf que cela ne devait pas avoir fonctionné pour moi dans ce scénario.

Si vous remplissez la boîte dynamiquement, ou avec ComboBoxItem éléments dans la liste déroulante directement dans le XAML, c'est le code que j'utilise:

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string val = String.Empty;
    if (cbx.SelectedValue == null)
        val = cbx.SelectionBoxItem.ToString();
    else
        val = cboParser(cbx.SelectedValue.ToString());
}

, Vous verrez que j'ai cboParser, là. C'est parce que la sortie de SelectedValue ressemble à ceci: System.Windows.Controls.Control: Some Value. Au moins il fait dans mon projet. Donc, vous avez à analysez votre Some Value à partir de cela:

private static string cboParser(string controlString)
{
    if (controlString.Contains(':'))
    {
        controlString = controlString.Split(':')[1].TrimStart(' ');
    }
    return controlString;
}

Mais c'est pourquoi il y a tant de réponses sur cette page. Cela dépend en grande partie de la façon dont vous remplissez la boîte, de la façon dont vous pouvez en récupérer la valeur. Une réponse peut être juste dans une circonstance, et fausse dans l'autre.

2
répondu vapcguy 2016-11-07 16:55:57

Créez un événement ComboBox SelectionChanged et définissez ItemsSource= "{Binding} " dans la conception WPF:

Code:

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string ob = ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
    MessageBox.Show(ob);
}
2
répondu Vinay Kumar 2018-04-19 14:02:11

Comme variante dans le gestionnaire D'événements ComboBox SelectionChanged:

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}
2
répondu Oleg S. 2018-04-19 14:04:06
MsgBox(cmbCut.SelectedValue().ToString())
0
répondu Poramate 2013-05-20 23:52:35

J'ai eu un problème similaire et j'ai essayé un certain nombre de solutions suggérées dans ce thread mais j'ai trouvé que L'événement SelectionChanged se déclenchait avant que L'élément ComboBox ne soit mis à jour pour afficher la nouvelle sélection (c'est-à-dire qu'il donnait toujours le contenu de la combobox avant le changement).

Afin de surmonter cela, j'ai trouvé qu'il était préférable d'utiliser le paramètre e qui est automatiquement passé au gestionnaire d'événements plutôt que d'essayer de charger la valeur directement à partir du combo boîte.

XAML:

<Window.Resources>
    <x:Array x:Key="Combo" Type="sys:String">
        <sys:String>Item 1</sys:String>
        <sys:String>Item 2</sys:String>
    </x:Array>
</Window.Resources>
<Grid>
    <ComboBox Name="myCombo" ItemsSource="{StaticResource Combo}" SelectionChanged="ComboBox_SelectionChanged" />
    <TextBlock Name="MyTextBlock"></TextBlock>
</Grid>

C#:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string chosenValue = e.AddedItems[0].ToString();
}
0
répondu Ben Broadley 2015-06-05 10:25:24
private void usuarioBox_TextChanged(object sender, EventArgs e)
{
    string textComboBox = usuarioBox.Text;
}
0
répondu Maxson Jordan 2016-06-09 15:04:17

Pour obtenir la valeur de l'index sélectionné de la liste déroulante en C#, Utilisez:

Combobox.SelectedValue
0
répondu basit raza 2016-06-09 15:05:29

C'est le même principe.

Vous pouvez utiliser SelectedIndex et utiliser ComboBox.Éléments[SelectedIndex].ToString (). Ou tout simplement ComboBox.SelectedItem et le lancer à n'importe quel type dont vous avez besoin:)

0
répondu Machinarius 2018-04-19 13:39:58

En fait, vous pouvez le faire de la manière suivante.

Supposons que le nom de votre ComboBox soit comboBoxA. Sa valeur peut être obtenue comme:

string combo = comboBoxA.SelectedValue.ToString();

Je pense qu'il est maintenant supporté puisque votre question a cinq ans.

0
répondu Mlarnt90 2018-04-19 14:05:17

Écrivez-le comme ceci:

String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()
0
répondu MSCoder 2018-04-19 14:05:43

XAML:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="19,123,0,0" Name="comboBox1" VerticalAlignment="Top" Width="33" ItemsSource="{Binding}" AllowDrop="True" AlternationCount="1">
    <ComboBoxItem Content="1" Name="ComboBoxItem1" />
    <ComboBoxItem Content="2" Name="ComboBoxItem2" />
    <ComboBoxItem Content="3" Name="ComboBoxItem3" />
</ComboBox>

C#:

if (ComboBoxItem1.IsSelected)
{
    // Your code
}
else if (ComboBoxItem2.IsSelected)
{
    // Your code
}
else if(ComboBoxItem3.IsSelected)
{
    // Your code
}
-1
répondu teikkhim 2015-01-19 10:53:16

J'utilise ce code, et ça fonctionne pour moi:

DataRowView typeItem = (DataRowView)myComboBox.SelectedItem; 
string value = typeItem.Row[0].ToString();
-1
répondu Santiago 2018-04-19 14:06:30

Cela fonctionne pour moi:

System.Data.DataRowView typeItem = (System.Data.DataRowView)ComboBoxName.SelectedItem;
string value = typeItem.DataView.ToTable("a").Rows[0][0].ToString();
-2
répondu Omid Tavana 2017-07-31 00:10:55