2009-12-08 104 views
6

轻松一为大家...Silverlight的 - 如何获取所选项目的文本的组合框

我是新来的Silverlight和数据表一样,事情真的错过的东西。我目前正在努力的是如何获得我的组合框当前选定项目的文本。 在的WinForms我会做:

ComboBox myCombo = new ComboBox....... 
string selected = myCombo.Text; 

我挣扎如何得到这个信息的。

回答

9

组合框的选择产品的物品类型,目前持股。所以,如果你设置绑定为字符串的集合,然后选定项目将是一个字符串:

string mySelectedValue = ((string)MyComboBox.SelectedItem); 

如果它是一个更复杂的对象,你需要转换和使用的预期目标。如果您在使用XAML列表框中的项目类,如:用的DisplayMemberPath属性

string mySelectedValue = 
    ((TextBlock)((ComboBoxItem)MyComboBox.SelectedItem).Content).Text; 
+0

我认为卡拉努斯直截了当地回答问题 – Raghurocks 2012-12-20 05:43:54

+0

我的回答是3岁。我一直没有在Silverlight中工作过一段时间,所以Calanus的答案可能适用于当前版本的Silverlight;我无法对此发表评论。当我回答时,我认为它不适用于像这里描述的那种丰富的组合框项目。 – 2013-01-15 17:52:01

+0

不适用于最新的silverlight。得到“无法投入”System.Windows.Controls.ComboBoxItem“类型的对象来键入”System.String“。” – 2014-03-12 17:52:07

-1
myCombo.SelectedItem.Content 

将返回ComboBoxItem的内容。这可能是一个TextBlock等等,具体取决于你在那里的内容,以及你用于项目模板的内容。

+1

不,不起作用1)因为SelectedItem不是一个字符串,2)即使你对它做了.ToString(),它也会返回System.Windows.Controls.ComboBoxItem。我知道我可以解析这个并获取信息,但肯定有一个更简单的方法? – Calanus 2009-12-08 17:39:26

7

对,答案是使用myCombo.SelectionBoxItem.ToString()

+0

确认最新silverlight作品 – 2014-03-12 17:54:01

3

对于一个复杂的对象,使用反射:

<ComboBox x:Name="MyComboBox"> 
    <ComboBox.Items> 
     <ComboBoxItem> 
      <TextBlock Text="Hello World"/> 
     </ComboBoxItem> 
    </ComboBox.Items> 
</ComboBox> 

然后,你就可以访问选择的项目是这样

var itemType = cbx.SelectedItem.GetType(); 
var pi = itemType.GetProperty(cbx.DisplayMemberPath); 
var stringValue = pi.GetValue(cbx.SelectedItem, null).ToString(); 
+0

非常感谢,您的解决方案是适用于所有情况的解决方案 – sepisoad 2012-01-27 03:54:51

0

如果你有一个字符串数组的简单组合框,你可以使用所选的字符串

(string)e.AddedItems[0]; 

假设我有一个产品列表组合,并且我想知道选定的产品名称。所以在SelectionChanged事件我写了下面的代码:

private void productCombo_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
     { 
      string product_type=(string)e.AddedItems[0]; 
     } 
1
string txt=(comboboxID.SelectedItem as BindingClass).Text.ToString(); 

string value=(comboboxID.SelectedItem as BindingClass).Value.ToString(); 


public class BindingClass 
{ 
    public string Text 
     { 
     set; 
      get; 
     } 

    public string Value 
     { 
     set; 
      get; 
     } 
} 
+1

专用套件;将设置属性字段为私人。 – PhilipChrist 2013-10-11 08:12:06

1
((ComboBoxItem)comboBox1.SelectedItem).Content.ToString() 

我得到了它的工作由本声明。