从c#wpf中的combobox中获取选定的值

我认为这可能是一个愚蠢的问题,但我无法在互联网上find它。

我刚开始使用WPF表单而不是WF表单。 在WFforms我可以做:

ComboBox.SelectedValue.toString(); 

这将工作正常。

我如何做到这一点在WPF中似乎没有select。

谢谢

那么..我find了一个更简单的解决scheme。

 String s = comboBox1.Text; 

这样我得到选定的值作为string。

与旧的WF格式相比,我已经find了一些奇怪的做法:

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

确保你已经在你的XAML文件中为你的ComboBox设置了名字:

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

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

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

我的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> 

内容显示为wpfcombobox的文本和名称。 要获得所选项目的名称,我已经按照这行代码

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

获取wpfcombobox的选定文本

 string name = cmbDeviceDefinitionId.SelectionBoxItem.ToString(); 

这些怎么样:

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

这取决于你绑定到你的ComboBox。 如果你已经绑定了一个名为MyObject的对象,并且拥有一个名为Name的属性,可以执行以下操作:

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

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

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

要在C#中使用combobox的选定索引的值,请使用:

 Combobox.SelectedValue 

在Wpf Design中创build一个ComboBox SelectionChanged事件并设置ItemsSource =“{Binding}”

码:

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

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

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

它的原理是一样的。

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

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

我有一个类似的问题,并尝试了一些在这个线程中build议的解决scheme,但发现SelectionChanged事件是在ComboBox项目实际更新以显示新的select之前触发的(即它总是在更改之前给出combobox的内容存在的)。

为了克服这个问题,我发现最好使用自动传递给事件处理函数的e参数,而不是直接从combobox中加载值。

XAML:

 <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> 

C#:

 private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { string chosenValue = e.AddedItems[0].ToString(); } 
 private void usuarioBox_TextChanged(object sender, EventArgs e) { string textComboBox = usuarioBox.Text; } 

其实你也可以这样做。

假设你的ComboBox neme是comboBoxA那么它的值可以得到,

  string combo= comboBoxA.SelectedValue.ToString(); 

我想现在它的支持,因为你的问题是5岁。

这很大程度上取决于盒子是如何填充的。 如果通过将一个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除了它不能在这种情况下工作。

如果您正在dynamic填充框,或直接在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 。 至less它是在我的项目中做的。 所以你必须parsing你的Some Value

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

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

你好,请写这样的:

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

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 } 

这个对我有用:

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