从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();