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

Xamarin.Forms如何获取ListView菜单项的BindingContext值及传递多参数

问题1解决方法

空值问题的核心原因是MenuItem.BindingContext绑定的是当前列表行对应的完整数据源对象,而非你单独绑定在Label上的WebUrl字段,你需要先把BindingContext强转为列表绑定用的实体类型,再读取对应属性:
首先你给ListView绑定数据时肯定用到了自定义实体类,示例结构如下:

// 列表绑定用的实体类,你本地的类名可能不同,对应修改即可
public class DocumentItem
{
    public string WebUrl { get; set; }
    // 其他业务字段
}

修改CheckOutFile事件代码即可正常取值:

protected void CheckOutFile(object sender, EventArgs e)
{
    var menuItem = sender as MenuItem;
    if (menuItem != null && menuItem.BindingContext is DocumentItem docItem)
    {
        // 强转实体类后读取WebUrl属性
        DisplayAlert("Alert", $"Check Out File: {docItem.WebUrl} requested", "ok");
    }
}

问题2解决方法

不需要修改界面展示逻辑,只需要在你的数据源实体类中补充你需要传递的3个关联属性即可,哪怕这些属性不在界面上渲染,也会完整保存在BindingContext中:
先修改实体类补充需要的字段,示例如下:

public class DocumentItem
{
    public string WebUrl { get; set; }
    // 新增需要传递的关联字段
    public int FileId { get; set; }
    public string FileName { get; set; }
    public int CreateUserId { get; set; }
}

给ListView绑定数据源时,给每个DocumentItem对象的三个新增字段都完成赋值,不需要修改XAML的展示代码,事件中可直接读取所有字段:

protected void CheckOutFile(object sender, EventArgs e)
{
    var menuItem = sender as MenuItem;
    if (menuItem != null && menuItem.BindingContext is DocumentItem docItem)
    {
        // 直接读取所有需要的关联值即可
        var webUrl = docItem.WebUrl;
        var fileId = docItem.FileId;
        var fileName = docItem.FileName;
        var userId = docItem.CreateUserId;
        // 后续写你的业务逻辑即可
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:00:04