从C#WPF中的组合框中获取选定的值

时间:2010-12-04 02:26:21

标签: c# wpf combobox

我刚开始使用WPF表单而不是Windows Forms表单。在Windows窗体表单中,我可以这样做:

ComboBox.SelectedValue.toString();

这样可以正常工作。

如何在WPF中执行此操作?它似乎没有选择。

22 个答案:

答案 0 :(得分:79)

嗯..我找到了一个更简单的解决方案。

String s = comboBox1.Text;

这样我将选中的值作为字符串。

答案 1 :(得分:72)

与旧的WF表格相比,我认为这样做有点奇怪:

ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
string value = typeItem.Content.ToString();

答案 2 :(得分:10)

确保您已在XAML文件中设置ComboBox的名称:

<ComboBox Height="23" Name="comboBox" />

在您的代码中,您可以使用SelectedItem属性访问所选项目:

MessageBox.Show(comboBox.SelectedItem.ToString());

答案 3 :(得分:9)

我的XAML如下:

<ComboBox Grid.Row="2" Grid.Column="1" Height="25" Width="200" SelectedIndex="0" Name="cmbDeviceDefinitionId">
    <ComboBoxItem Content="United States" Name="US"></ComboBoxItem>
    <ComboBoxItem Content="European Union" Name="EU"></ComboBoxItem>
    <ComboBoxItem Content="Asia Pacific" Name="AP"></ComboBoxItem>
</ComboBox>

内容显示为文本和WPF组合框的名称。要获取所选项目的名称,请遵循以下代码行:

ComboBoxItem ComboItem = (ComboBoxItem)cmbDeviceDefinitionId.SelectedItem;
string name = ComboItem.Name;

获取WPF组合框的选定文本:

string name = cmbDeviceDefinitionId.SelectionBoxItem.ToString();

答案 4 :(得分:6)

这些怎么样:

string yourstringname = (yourComboBox.SelectedItem as ComboBoxItem).Content.ToString();

答案 5 :(得分:5)

这取决于你绑定到ComboBox的内容。如果绑定了一个名为MyObject的对象,并且让我们说,名为Name的属性执行以下操作:

MyObject mo = myListBox.SelectedItem as MyObject;
return mo.Name;

答案 6 :(得分:3)

解决这个问题很简单。我所做的只是将“SelectedValuePath”添加到我的XAML代码中并将其绑定到我想要使用组合框返回的模型属性。

<ComboBox SelectedValuePath="_Department"
          DisplayMemberPath="_Department"
          Height="23"
          HorizontalAlignment="Left"
          ItemsSource="{Binding}"
          Margin="-58,1,0,5"
          Name="_DepartmentComboBox"
          VerticalAlignment="Center"
          Width="268"/>

答案 7 :(得分:2)

创建一个ComboBox SelectionChanged事件并在WPF设计中设置ItemsSource =“{Binding}”:

代码:

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string ob = ((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();
    MessageBox.Show(ob);
}

答案 8 :(得分:2)

作为ComboBox SelectionChanged事件处理程序中的变体:

private void ComboBoxName_SelectionChanged(object send ...
{
    string s = ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();
}

答案 9 :(得分:2)

这很大程度上取决于盒子的填充方式。如果通过将DataTable(或其他集合)附加到ItemsSource来完成,您可能会发现将SelectionChanged事件处理程序附加到XAML中的框中,然后在代码中使用它 - 有用的:

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string s = ((DataRowView)cbx.Items.GetItemAt(cbx.SelectedIndex)).Row.ItemArray[0].ToString();
}

我在这里看到了其他两个有不同部分的答案 - 一个有ComboBoxName.Items.GetItemAt(ComboBoxName.SelectedIndex).ToString();,看起来很相似,但没有把盒子投到DataRowView,我发现我需要的东西要做,另一个:((DataRowView)comboBox1.SelectedItem).Row.ItemArray[0].ToString();,使用.SelectedItem代替.Items.GetItemAt(comboBox1.SelectedIndex)。这可能有用,但我所确定的实际上是我上面写的两个的组合,并且不记得为什么我避免.SelectedItem,除非它一定不适合我场景。

如果您正在动态填充框,或者直接在XAML中的下拉列表中填充ComboBoxItem项,则这是我使用的代码:

private void ComboBoxName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cbx = (ComboBox)sender;
    string val = String.Empty;
    if (cbx.SelectedValue == null)
        val = cbx.SelectionBoxItem.ToString();
    else
        val = cboParser(cbx.SelectedValue.ToString());
}

你会在那里看到我cboParser。这是因为SelectedValue的输出如下所示:System.Windows.Controls.Control: Some Value。至少它在我的项目中做了。所以你必须解析你的Some Value

private static string cboParser(string controlString)
{
    if (controlString.Contains(':'))
    {
        controlString = controlString.Split(':')[1].TrimStart(' ');
    }
    return controlString;
}

但这就是为什么这个页面上有这么多答案的原因。这在很大程度上取决于你如何填充框,以及如何从中获取价值。在一种情况下答案可能是正确的,另一种情况则是错误的。

答案 10 :(得分:1)

private void usuarioBox_TextChanged(object sender, EventArgs e)
{
    string textComboBox = usuarioBox.Text;
}

答案 11 :(得分:0)

我遇到了类似的问题并尝试了在此线程中建议的一些解决方案,但发现SelectionChanged事件在ComboBox项实际更新之前触发以显示新选择(即因此它始终给出了组合框的内容发生变化)。

为了克服这个问题,我发现最好使用自动传递给事件处理程序的e参数,而不是尝试直接从组合框加载值。

XAML:

:

C#:

<Window.Resources>
    <x:Array x:Key="Combo" Type="sys:String">
        <sys:String>Item 1</sys:String>
        <sys:String>Item 2</sys:String>
    </x:Array>
</Window.Resources>
<Grid>
    <ComboBox Name="myCombo" ItemsSource="{StaticResource Combo}" SelectionChanged="ComboBox_SelectionChanged" />
    <TextBlock Name="MyTextBlock"></TextBlock>
</Grid>

答案 12 :(得分:0)

SELECT string_val, 
       CASE WHEN 
       REGEXP_REPLACE(CASE WHEN val1 REGEXP '[a-zA-Z]$' = 1 
                      THEN CONCAT(val1,val2) ELSE val2 END,'[0-9]','')=@Val 
       THEN 'Yes' ELSE 'No' END AS 'Yes/No'
  FROM
(SELECT string_val,
        SUBSTRING(string_val,1,LOCATE(@val,string_val)-1) val1,
        SUBSTRING(string_val,LOCATE(@val,string_val)) val2
FROM mytable) A;

答案 13 :(得分:0)

如果您想获取值并进行验证,可以执行以下操作

string index = ComboBoxDB.Text;
        if (index.Equals(""))
        {                
            MessageBox.Show("your message");
        }
        else
        {
            openFileDialog1.ShowDialog();
            string file = openFileDialog1.FileName;
            reader = new StreamReader(File.OpenRead(file));
        }

答案 14 :(得分:0)

像这样写:

String CmbTitle = (cmb.SelectedItem as ComboBoxItem).Content.ToString()

答案 15 :(得分:0)

实际上你也可以通过以下方式实现。

假设您的ComboBox名称为comboBoxA。然后它的值可以得到:

string combo = comboBoxA.SelectedValue.ToString();

我认为现在支持,因为你的问题是五年了。

答案 16 :(得分:0)

要在C#中获取ComboBox所选索引的值,请使用:

Combobox.SelectedValue

答案 17 :(得分:0)

MsgBox(cmbCut.SelectedValue().ToString())

答案 18 :(得分:0)

这是相同的原则。

您可以使用SelectedIndex并使用ComboBox.Items [SelectedIndex] .ToString()。或者只是ComboBox.SelectedItem并将其转换为您需要的任何类型:)

答案 19 :(得分:-1)

我使用此代码,它适用于我:

DataRowView typeItem = (DataRowView)myComboBox.SelectedItem; 
string value = typeItem.Row[0].ToString();

答案 20 :(得分:-1)

XAML:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="19,123,0,0" Name="comboBox1" VerticalAlignment="Top" Width="33" ItemsSource="{Binding}" AllowDrop="True" AlternationCount="1">
    <ComboBoxItem Content="1" Name="ComboBoxItem1" />
    <ComboBoxItem Content="2" Name="ComboBoxItem2" />
    <ComboBoxItem Content="3" Name="ComboBoxItem3" />
</ComboBox>

C#:

if (ComboBoxItem1.IsSelected)
{
    // Your code
}
else if (ComboBoxItem2.IsSelected)
{
    // Your code
}
else if(ComboBoxItem3.IsSelected)
{
    // Your code
}

答案 21 :(得分:-2)

它对我有用:

System.Data.DataRowView typeItem = (System.Data.DataRowView)ComboBoxName.SelectedItem;
string value = typeItem.DataView.ToTable("a").Rows[0][0].ToString();