簡體   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