user857521
user857521

Reputation:

Get wpf combobox selected value

How do I get the selected value (eg Option1) as a string from my example below. I've tried loads of suggestions on Google but can't get the string.

XAML:

<ComboBox x:Name="selectOption" Text="Select Option" 
                 SelectionChanged="selectOption_SelectionChanged" 
                 SelectedValue="{Binding VMselectedOption, Mode=TwoWay}" >
    <ComboBoxItem Name="cbb1">Option1</ComboBoxItem>
    <ComboBoxItem Name="cbb2">Option2</ComboBoxItem>
    <ComboBoxItem Name="cbb3">Option3</ComboBoxItem>
</ComboBox>

codebehind:

private void selectOption_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   var selectedValue = selectOption.SelectedValue; 
}

//elsewhere in code
var test = viewModel.VMselectedOption;

Both selectedValue and test return the string "System.Windows.Controls.ComboBoxItem: Option1" and not "Option1"

This should be really simple but I just cannot get this working or see what is wrong?

Upvotes: 15

Views: 59786

Answers (5)

Supitchaya
Supitchaya

Reputation: 511

You should set SelectedValuePath="Content".

<ComboBox x:Name="selectOption" Text="Select Option" 
                 SelectionChanged="selectOption_SelectionChanged" 
                 SelectedValue="{Binding VMselectedOption, Mode=TwoWay}" 
                 SelectedValuePath="Content">
    <ComboBoxItem Name="cbb1">Option1</ComboBoxItem>
    <ComboBoxItem Name="cbb2">Option2</ComboBoxItem>
    <ComboBoxItem Name="cbb3">Option3</ComboBoxItem>
</ComboBox>

Upvotes: 22

Anatoly Nikolaev
Anatoly Nikolaev

Reputation: 540

string Value="";
if(myComboBox.SelectedIndex>=0) 
  Value=((ComboBoxItem)myComboBox.SelectedItem).Content.ToString();

Upvotes: 9

Nitin Purohit
Nitin Purohit

Reputation: 18578

Update your code to get the Content of comboboxItem.

var selectedValue = ((ComboBoxItem)selectOption.SelectedItem).Content.ToString();

Upvotes: 7

Vlad
Vlad

Reputation: 35594

You shouldn't insert the combobox items manually. Set them by using ItemsSource.

Basically you should create a list of options (or objects representing options) and set them as ItemsSource, this way your SelectedItem will be exactly the option which is selected, not the automatically created wrapping ComboboxItem.

Upvotes: 13

Daniel
Daniel

Reputation: 11064

ComboBoxItem.Content is of type Object, so you'll need to cast the item yourself.

Upvotes: 2

Related Questions