获取仅包含文本条目的组合框的选定文本的最简单方法是啥?
Posted
技术标签:
【中文标题】获取仅包含文本条目的组合框的选定文本的最简单方法是啥?【英文标题】:What is the simplest way to get the selected text of a combo box containing only text entries?获取仅包含文本条目的组合框的选定文本的最简单方法是什么? 【发布时间】:2011-04-12 21:28:21 【问题描述】:我的 WPF ComboBox 仅包含文本条目。用户将选择一个。 获取所选 ComboBoxItem 文本的最简单方法是什么?请用 C# 和 Visual Basic 回答。这是我的组合框:
<ComboBox Name="cboPickOne">
<ComboBoxItem>This</ComboBoxItem>
<ComboBoxItem>should be</ComboBoxItem>
<ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
顺便说一句,我知道答案,但并不容易找到。我想我会发布这个问题来帮助别人。修订:我学到了一个更好的答案。通过添加 SelectedValuePath="Content" 作为 ComboBox 属性,我不再需要丑陋的转换代码。请参阅下面安迪的回答。
【问题讨论】:
如果您知道答案,请随时发布并将其标记为已接受的答案。其他人不需要做同样的研究两次。 ;-) 谁知道呢,也许有人可以根据你的工作提出更好的解决方案...... 添加到该评论中,您可以轻松地将您的问题标记为社区 wiki。 【参考方案1】:在你的xml中添加SelectedValuePath="Content"
<ComboBox
Name="cboPickOne"
SelectedValuePath="Content"
>
<ComboBoxItem>This</ComboBoxItem>
<ComboBoxItem>should be</ComboBoxItem>
<ComboBoxItem>easier!</ComboBoxItem>
</ComboBox>
这样,当您在 C# 代码中使用 .SelectedValue.ToString()
时,它只会获取字符串值,而不会包含所有额外的垃圾:
stringValue = cboPickOne.SelectedValue.ToString()
【讨论】:
尽管我希望它如此干净和简单,但仅凭这一点是行不通的。 SelectedValue 返回一个 ComboBoxItem,而不是我要查找的字符串值。在 SelectedValue 之后放置 ToString 将返回此 System.Windows.Controls.ComboBoxItem: 后跟所选文本。 好的。我看到您已将 SelectedValuePath="Content" 作为属性添加到组合框。这样可行!不需要丑陋的铸造。它很好、干净、简单——正是我想要的。谢谢安迪! 您也可以绑定到 SelectedValue.Content 作为路径,这将 ComboBox 的行为与绑定目标的要求解耦。【参考方案2】:为了澄清 Heinzi 和 Jim Brissom 的答案,这里的代码是 Visual Basic:
Dim text As String = DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content.ToString()
和C#:
string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
谢谢!
【讨论】:
这取决于您是否将项目明确指定为 ComboBoxItems 或通过绑定直接作为字符串。在后一种情况下,.Content
我认为会抛出异常。【参考方案3】:
我刚刚这样做了。
string SelectedItem = MyComboBox.Text;
【讨论】:
【参考方案4】:如果您已经知道 ComboBoxItem 的内容只会是字符串,只需将内容作为字符串访问:
string text = ((ComboBoxItem)cboPickOne.SelectedItem).Content.ToString();
【讨论】:
【参考方案5】:如果您将 ComboBox 中的项目添加为
youComboBox.Items.Add("Data");
然后使用这个:
youComboBox.SelectedItem;
但是如果你通过数据绑定添加项目,使用这个:
DataRowView vrow = (DataRowView)youComboBox.SelectedItem;
DataRow row = vrow.Row;
MessageBox.Show(row[1].ToString());
【讨论】:
【参考方案6】:使用cboPickOne.Text
应该会给你字符串。
【讨论】:
【参考方案7】:var s = (string)((ComboBoxItem)cboPickOne.SelectedItem).Content;
Dim s = DirectCast(DirectCast(cboPickOne.SelectedItem, ComboBoxItem).Content, String)
由于我们知道内容是一个字符串,我更喜欢强制转换而不是 ToString()
方法调用。
【讨论】:
DirectCast(...)
做了什么?以上是关于获取仅包含文本条目的组合框的选定文本的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章