繁体   English   中英

如何通过ListView ContextAction获取ObservableCollection项目?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM