Windows 组合框选定项(从列表<>填充)

Windows ComboBox Selected Item (populated from List<>)

我正在设置这样的组合框项目:

List<Object> items = new List<Object>();
items.Add(new { Text = "MyVal", Value = 1 });
cbo.DataSource = items;

然后在VS中returns:

但我现在不能简单地说cbo.SelectedItem.Text或cbo.SelectedItem.Value。 如果我尝试这样做,我会收到错误

"object does not contain a definition for value and no extension method value 
accepting a first argument of type object could be found"

请问如何获取值属性

基于很好的回复,我现在添加了这个,以表明我根本无法获取 Text 或 Value 的属性。

我试过这段代码将 "string" 传递给

 public class ComboboxItem
    {
        public string Text { get; set; }
        public short Value { get; set; }

        public ComboboxItem(string t, short v)
        {
            Text = t;
            Value = v;
        }

    }

使用文本和值属性 (ComboboxItem) 创建 class,然后使用 class 创建 item 列表。现在你可以做如下

ComboboxItem obj = cbo.SelectedItem as ComboboxItem;
//now you can get the obj.Value

你应该加上这个。cbo.SelectedItem as object; 然后,例如:

public class student
{
    public string name;
    public int age;
}
var stu = cbo.SelectedItem as student;
string name = stu.name;
int age = stu.age;

好的,这是我的第一个答案。

我注意到您删除了代码的某些部分,因此我假设您没有使用对象 'object',而是使用其他对象,否则您的代码将无法编译。

ComboBox 不保存其值的数据类型,它都将它们视为简单对象。因此 SelectedItem 将是对象类型,然后应将其转换为正确的数据类型以访问文本/值 属性.

var myItem = cbo.SelectedItem as MyObject
if(myItem != null){
    Console.WriteLine("Value is {0}", myItem.Value);
}

组合框绑定到包含匿名类型的列表。你应该使用 dynamic keyword.

dynamic item = cbo.SelectedItem;

String text = item.Text;
Int32 value = item.Value;