我刚开始使用WPF表单而不是Windows Forms表单。在Windows窗体表单中,我可以这样做:
ComboBox.SelectedValue.toString();
这样可以正常工作。
如何在WPF中执行此操作?它似乎没有选择。
答案 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();