在仅包含文本条目的组合框中获取所选文本的最简单方法是什么?

Dev*_*Dan 29 wpf combobox selectedvalue selecteditem selectedtext

我的WPF ComboBox仅包含文本条目.用户将选择一个.获取所选ComboBoxItem文本的最简单方法是什么?请在C#和Visual Basic中回答.这是我的ComboBox:

<ComboBox Name="cboPickOne">
    <ComboBoxItem>This</ComboBoxItem>
    <ComboBoxItem>should be</ComboBoxItem>
    <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我知道答案,但要找到它并不容易.我以为我会发布问题来帮助别人.修订:我学到了更好的答案.通过添加SelectedValuePath ="Content"作为ComboBox属性,我不再需要丑陋的强制转换代码.请参阅下面的安迪回答.

And*_*ndy 55

<ComboBox 
  Name="cboPickOne"
  SelectedValuePath="Content"
  >
  <ComboBoxItem>This</ComboBoxItem>
  <ComboBoxItem>should be</ComboBoxItem>
  <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

在代码中:

   stringValue = cboPickOne.SelectedValue.ToString()
Run Code Online (Sandbox Code Playgroud)

  • 尽管我希望它干净简单,但仅凭这一点无效.SelectedValue返回一个ComboBoxItem,而不是我正在寻找的字符串值.在SelectedValue之后放置ToString将返回此System.Windows.Controls.ComboBoxItem:后跟所选文本. (8认同)
  • 好.我看到你已经将SelectedValuePath ="Content"作为属性添加到ComboBox中.这样可行!不需要丑陋的铸造.它很好,干净而且简单 - 正是我想要的.谢谢安迪! (6认同)

Dev*_*Dan 9

只是为了澄清Heinzi和Jim Brissom的答案,这里是Visual Basic中的代码 :

Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString()
Run Code Online (Sandbox Code Playgroud)

C#:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
Run Code Online (Sandbox Code Playgroud)

谢谢!


小智 7

我就是这样做的。

string SelectedItem = MyComboBox.Text;
Run Code Online (Sandbox Code Playgroud)


Jim*_*som 6

如果您已经知道 ComboBoxItem 的内容只是字符串,则只需以字符串形式访问内容:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
Run Code Online (Sandbox Code Playgroud)