C# 如何通过ListView ContextAction获取ObservableCollection项?
我需要使用contextactions从我的C# 如何通过ListView ContextAction获取ObservableCollection项?,c#,listview,xamarin.forms,observablecollection,C#,Listview,Xamarin.forms,Observablecollection,我需要使用contextactions从我的ObservableCollection中删除一个项目。我试图这样做,但我最终什么也不删除,因为我试图删除的对象只是从listview中获取的,而不是observablecollection public async void OnDelete(object sender, EventArgs e) { var menuItem = ((MenuItem) sender); if (menuItem != null) { var se
ObservableCollection
中删除一个项目。我试图这样做,但我最终什么也不删除,因为我试图删除的对象只是从listview中获取的,而不是observablecollection
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;
}
}
}
public异步void OnDelete(对象发送方,事件参数e){
var menuItem=((menuItem)发送方);
if(menuItem!=null){
var selectedZone=(ViewModels.ZoneViewModel)menuItem.CommandParameter;
var deleteAction=WAIT DisplayActionSheet(“删除”+所选区域名称+“?”、“取消”、“删除”);
开关(删除操作){
案例“删除”:
等待显示警报(“单击删除上下文操作:”,menuItem.CommandParameter+“Name=“+selectedZone.Name+”Address=“+selectedZone.Address+”Image=“+selectedZone.Image,”确定”);
Zones=wait BlobCache.UserAccount.GetObject>(“Zones”);
区域。删除(selectedZone);
等待BlobCache.UserAccount.InsertObject(“区域”,区域);
zonesList.ItemsSource=区域;
打破
}
}
}
那么,如何从我的observablecollection(我通过contextaction选择的集合)中删除正确的项目呢?
Zones = await BlobCache.UserAccount.GetObject < ObservableCollection < ViewModels.ZoneViewModel >> ("zones");
假设
ZoneViewModel
对象具有唯一的属性Id。您还需要使用导入Linq。在删除之前,您正在创建区域的新副本;这意味着您选择的区域指向的副本与集合中的副本不同,因此不会从集合中删除该副本。尝试跳过区域刷新,或在删除之前搜索更新的副本以按ID查找正确的项目。
Zones.Remove(Zones.Single(z => z.Id == selectedZone.Id));