【发布时间】:2017-06-09 12:29:06
【问题描述】:
我需要使用 contextactions 从我的ObservableCollection<ViewModels.ZoneViewModel> 中删除一个项目。我正在尝试这样做,但最终我什么也没删除,因为我要删除的对象只是从列表视图中获取的,而不是从 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 中删除正确的项目,即我通过 contextaction 选择的项目?
【问题讨论】:
-
您在删除之前正在创建区域的新副本;这意味着您的 selectedZone 指向的副本与您的集合中的副本不同,因此它不会从集合中删除。尝试跳过区域的刷新,或搜索更新的副本以在删除之前按 ID 找到正确的项目。
标签: c# listview xamarin.forms observablecollection