Reputation:
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
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
Reputation: 540
string Value="";
if(myComboBox.SelectedIndex>=0)
Value=((ComboBoxItem)myComboBox.SelectedItem).Content.ToString();
Upvotes: 9
Reputation: 18578
Update your code to get the Content of comboboxItem.
var selectedValue = ((ComboBoxItem)selectOption.SelectedItem).Content.ToString();
Upvotes: 7
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
Reputation: 11064
ComboBoxItem.Content is of type Object, so you'll need to cast the item yourself.
Upvotes: 2