【问题标题】: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。

标签: wpf combobox selecteditem selectedvalue selectedtext


【解决方案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(...)做了什么?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-15
          • 1970-01-01
          • 2014-05-16
          相关资源
          最近更新 更多