13

如何从下面的示例中获取所选值(例如Option1string。我在 Google 上尝试了很多建议,但无法获得字符串。

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>

代码隐藏:

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

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

selectedValue 和 test 都返回字符串“ System.Windows.Controls.ComboBoxItem: Option1 ”而不是“ Option1

这应该很简单,但我就是不能让它工作或看看有什么问题?

4

5 回答 5

21

您应该设置 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>
于 2014-08-25T09:34:36.203 回答
13

您不应该手动插入组合框项目。使用 设置它们ItemsSource

基本上,您应该创建一个选项列表(或表示选项的对象)并将它们设置为ItemsSource,这样您SelectedItem将完全是选择的选项,而不是自动创建的 wrapping ComboboxItem

于 2013-10-18T16:03:09.727 回答
8
string Value="";
if(myComboBox.SelectedIndex>=0) 
  Value=((ComboBoxItem)myComboBox.SelectedItem).Content.ToString();
于 2013-10-18T16:29:08.743 回答
7

更新您的代码以获取 comboboxItem 的内容。

var selectedValue = ((ComboBoxItem)selectOption.SelectedItem).Content.ToString();
于 2013-10-18T16:04:23.483 回答
2

ComboBoxItem.Content属于 Object 类型,因此您需要自己投射该项目。

于 2013-10-18T16:03:09.583 回答