![](/img/trans.png)
[英]How to know the listView viewCell whose contextAction menuItem is clicked?
[英]How to get ObservableCollection item by ListView ContextAction?
我需要使用contextactions从我的ObservableCollection<ViewModels.ZoneViewModel>
删除一个项目。 我正在尝试执行此操作,但最终却什么也没删除,因为我要删除的对象只是从列表视图中获取的,而不是可观察的集合。
public async void OnDelete(object sender, EventArgs e) {
var menuItem = ((MenuItem) sender);
if (menuItem != null) {
var selectedZone = (ViewModels.ZoneViewModel) menuItem.CommandParameter;
var deleteAction = await DisplayActionSheet("Delete " + selectedZone.Name + "?", "Cancel", "Delete");
switch (deleteAction) {
case "Delete":
await DisplayAlert("delete Context Action clicked: ", menuItem.CommandParameter + "Name= " + selectedZone.Name + " Address=" + selectedZone.Address + " Image=" + selectedZone.Image, "OK");
Zones = await BlobCache.UserAccount.GetObject < ObservableCollection < ViewModels.ZoneViewModel >> ("zones");
Zones.Remove(selectedZone);
await BlobCache.UserAccount.InsertObject < ObservableCollection < ViewModels.ZoneViewModel >> ("zones", Zones);
zonesList.ItemsSource = Zones;
break;
}
}
}
那么,如何获得要从我的可观察性集合中删除的正确项目,即我通过contextaction选择的项目?
在这条线上
Zones = await BlobCache.UserAccount.GetObject < ObservableCollection < ViewModels.ZoneViewModel >> ("zones");
您将整个Zones
对象替换为新的ObservableCollection
,从而导致要删除的对象不再存在。 尽管您可能会认为它仍然存在,因为属性可能相同,但这是一个不同的对象。
您可以通过未获得Zones
的新版本来进行修复。 或编辑删除内容,如下所示:
Zones.Remove(Zones.Single(z => z.Id == selectedZone.Id));
假设ZoneViewModel
对象具有唯一的属性ID。 您还需要使用导入Linq。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.