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