You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin/SQLite/C# 如何通过删除菜单项移除ListView行及SQLite表数据

修复方案

问题根因

  • 事件方法未添加async关键字,await调用无法正常执行,删除操作实际根本没有触发
  • 不需要手动实例化新的LeaveEntry对象,你已经通过MenuItem的BindingContext拿到了对应条目的完整实例,直接用这个实例调用删除方法即可
  • 原代码中取listView.SelectedItem的逻辑多余且未写完,长按弹出菜单时选中项不一定会同步赋值,反而会导致空引用
  • 删除数据库数据后未刷新ListView的数据源,界面不会同步更新删除结果

修复后的代码

// 首先给方法添加async关键字,支持await调用
public async void MenuItem_Clicked(object sender, EventArgs e)
{
    LeaveEntry itemToDelete = ((sender as MenuItem).BindingContext as LeaveEntry);
    // 增加空判断避免空引用异常
    if (itemToDelete == null) return;
    
    // 直接传入拿到的实例执行删除,SQLite会根据主键ID匹配删除对应条目
    await App.Database.DeleteLeaveEntry(itemToDelete);
    
    // 重新查询最新的休假列表,刷新ListView显示
    var latestLeaveList = await App.Database.GetLeaveEntryAsync();
    listView.ItemsSource = latestLeaveList;
}

可选优化建议

如果你页面的ListView绑定的是ObservableCollection<LeaveEntry>类型的数据源,删除后直接移除集合中的对应项即可,不需要重新查询整个列表,性能更高:

// 假设你的页面有一个名为LeaveEntries的ObservableCollection<LeaveEntry>类型的绑定数据源
LeaveEntries.Remove(itemToDelete);

内容的提问来源于stack exchange,提问作者aTubOfAdam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:45:01