Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过ListView ContextAction获取ObservableCollection项?_C#_Listview_Xamarin.forms_Observablecollection - Fatal编程技术网

C# 如何通过ListView ContextAction获取ObservableCollection项?

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

我需要使用contextactions从我的
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));