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

Xamarin.Forms ListView项内按钮点击获取对应绑定项方法

问题根因

原有代码失效的核心原因:

  • 点击列表项内部嵌套的Delete按钮时,不会触发ListView的项选中行为,因此MyList.SelectedItem实际取值为null,后续移除项、更新Scan.Text的逻辑无法正常执行。
  • 删除项后直接将Scan.Text赋值为被删除项的Value,和扫码添加时调用SumCost计算总金额的逻辑不匹配,会导致金额显示错误。

列表项展示

修复步骤
  1. 不需要修改现有XAML布局,首先在后台代码文件顶部引入Linq命名空间,用于总金额求和计算:
using System.Linq;
  1. 将原有DeleteButton_Clicked事件代码替换为以下实现:
private void DeleteButton_Clicked(object sender, EventArgs e)
{
    // 触发点击事件的Button就是传入的sender对象
    var deleteButton = sender as Button;
    // DataTemplate内控件的BindingContext就是当前行绑定的ItemID实例
    if (deleteButton?.BindingContext is ItemID currentDeleteItem)
    {
        // 从Observable集合中移除对应项
        Items.Remove(currentDeleteItem);
        // 重新计算剩余所有项的总金额,和扫码添加时的计算逻辑保持一致
        double totalCost = Items.Sum(item => item.Value);
        Scan.Text = totalCost.ToString();
        // 按需清空ListView选中状态
        MyList.SelectedItem = null;
    }
}
实现原理

ListView通过DataTemplate生成列表行时,会自动将行内所有控件的BindingContext赋值为当前行绑定的数据源对象,这个取值逻辑不依赖ListView的选中状态:哪怕没有点击选中整行、只是点击行内的按钮,也能准确拿到按钮所属行对应的绑定数据,是Xamarin.Forms列表行内控件获取关联数据最通用的实现方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:15:27