我需要使用contextactions从我的ObservableCollection<ViewModels.ZoneViewModel>
中删除一个项目。我正在尝试这样做,但最终我没有删除任何内容,因为我想要删除的对象只是从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;
}
}
}
那么如何从我的observablecollection中获取正确的项目,我通过上下文操作选择的那个?
答案 0 :(得分:1)
在这一行
Zones = await BlobCache.UserAccount.GetObject < ObservableCollection < ViewModels.ZoneViewModel >> ("zones");
使用新的Zones
替换整个ObservableCollection
对象,导致您要删除的对象不再存在。虽然你可能会认为它仍然存在,因为属性可能是相同的,但它是一个不同的对象。
您可以通过不获取Zones
的新版本来修复它。或者像这样编辑删除:
Zones.Remove(Zones.Single(z => z.Id == selectedZone.Id));
假设ZoneViewModel
对象具有唯一的属性Id。您还需要使用。