使用multiselect从ListBox中检索选定的值

时间:2012-01-16 07:58:22

标签: c# wpf listbox anonymous-types multi-select

我使用LINQ加载了一个WPF ListBox:

lbxCalculosSec.ItemsSource = from p in database.CALCULOS
                             orderby p.NOMBRECALCULO
                             select new { ID = p.IDCALCULO, NOMBRE = p.NOMBRECALCULO + " - " + p.DESCRIPCIONCALCULO };

lbxCalculosSec.DisplayMemberPath = "NOMBRE";
lbxCalculosSec.SelectedValuePath = "ID";

列表框中有multiselect = true。问题是当我尝试从SelectedItems List中检索所有SelectedValue(ID)时。

当我在运行时检查一个SelectedItem时,对象类型为“<> f__AnonymousType0`2”

我试过用这个:

ItemPropertyInfo ID  = null;

lbxCalculosSec.SelectedItem.GetType().GetProperty("ID").GetValue(ID as ItemPropertyInfo, null)

但它不起作用。

我需要一个解决方案来访问ListBox Selected Values(ID字段)。

非常感谢你。

亲切的问候。

2 个答案:

答案 0 :(得分:3)

GetValue期望定义属性的实例,在这种情况下它是SelectedItem

var item = lbxCalculosSec.SelectedItem;
ItemPropertyInfo ID  = (ItemPropertyInfo)item.GetType()
                                             .GetProperty("ID")
                                             .GetValue(item, null);

修改
如果ID属于某种其他类型,例如int,则代码应为:

var item = lbxCalculosSec.SelectedItem;
int ID  = (int)item.GetType()
                   .GetProperty("ID")
                   .GetValue(item, null);

答案 1 :(得分:0)

GetValue期待值的来源,所以你应该在那里使用SelectedItem,而不是一些随机值,绝对不是null。