30

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

<ComboBox Name="cboPickOne">
    <ComboBoxItem>This</ComboBoxItem>
    <ComboBoxItem>should be</ComboBoxItem>
    <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>

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

4

7 回答 7

62

在你的 xml 添加SelectedValuePath="Content"

<ComboBox 
  Name="cboPickOne"
  SelectedValuePath="Content"
  >
  <ComboBoxItem>This</ComboBoxItem>
  <ComboBoxItem>should be</ComboBoxItem>
  <ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>

这样,当您.SelectedValue.ToString()在 C# 代码中使用时,它只会获取字符串值,而不会产生所有额外的垃圾:

   stringValue = cboPickOne.SelectedValue.ToString()
于 2010-09-16T13:03:05.107 回答
11

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

Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString()

C#

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();

谢谢!

于 2010-09-15T20:34:43.393 回答
8

我只是这样做了。

string SelectedItem = MyComboBox.Text;
于 2016-09-25T01:08:30.727 回答
4

如果您已经知道 ComboBoxItem 的内容只是字符串,只需将内容作为字符串访问:

string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
于 2010-09-15T20:23:40.687 回答
3

如果您将 ComboBox 中的项目添加为

youComboBox.Items.Add("Data"); 

然后使用这个:

youComboBox.SelectedItem; 

但是,如果您通过数据绑定添加项目,请使用:

DataRowView vrow = (DataRowView)youComboBox.SelectedItem;
DataRow row = vrow.Row;
MessageBox.Show(row[1].ToString());
于 2016-08-25T19:18:52.717 回答
2

使用cboPickOne.Text应该给你字符串。

于 2016-08-30T12:39:55.390 回答
0
var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content;

Dim s = DirectCast(DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content, String)

因为我们知道内容是一个字符串,所以我更喜欢强制转换而不是ToString()方法调用。

于 2010-09-15T20:24:12.747 回答