我附加ListView
ItemActivate
。通常我会使用listview.SelectedItems[0]
来获取触发事件的ListViewItem
。
现在我想订阅SelectedIndexChanged
,这样项目一旦被选中就会被激活。
不幸的是,这两个事件的sender
和e
都没有返回触发事件的项目(据我所知!)。
解决方法是使用lvSelectedItem
之类的字段并将活动项目存储在其中......但我怎样才能更好地完成此操作?不知怎的,我可以直接从发件人或eventargs获得所选项目?
这是我的代码:
private void lvPins_ItemActivate(object sender, EventArgs e)
{
var item = lvPins.SelectedItems[0];
var pin = item.Tag as Pin;
OnPinActivated(pin);
}
private void lvPins_SelectedIndexChanged(object sender, System.EventArgs e)
{
var item = lvPins.SelectedItems[0]; //this always cause argumentoutofrange exceotion
var pin = item.Tag as Pin;
OnPinActivated(pin);
}
答案 0 :(得分:2)
来自SelectedIndexChanged
的{{3}}:
要确定在ListView控件中选择了哪些项,请使用SelectedItems属性访问ListView.SelectedListViewItemCollection
您无法从事件参数中访问新选定的项目。
如果您不想继续引用ListView
,可以使用sender
进行访问:
((ListView)sender).SelectedItems
根据发布的代码进行更新:
我认为SelectedIndexChanged
被解雇两次:
SelectedItems
列表(然后获得空列表)Selecteditems
列表时(第二次您将获得所选项目)尝试将代码更改为:
if (lvPins.SelectedItems.Count > 0)
{
var item = lvPins.SelectedItems[0]; //the second time you will get the selected item here
var pin = item.Tag as Pin;
OnPinActivated(pin);
}