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

UWP C# ListView点击行获取Id时出现空引用异常求助

解决UWP ListView点击行获取Id时的ArgumentNullException问题

嘿,我来帮你搞定这个头疼的空引用异常!你遇到的问题其实是找错了获取列表项数据的正确方式,咱们拆解一下:

问题出在哪?

你在XAML里给整个ListView控件绑定了Tag="{Binding Id}",但这个绑定的上下文是ListView本身的DataContext,根本不是你点击的那一行的数据项。而且你在C#代码里想从sender(也就是ListView本身)里拿Id,这自然拿不到有效值,直接就抛出空引用异常了。

正确的实现方式

1. 修正XAML的绑定逻辑

不用给ListView设置Tag,只要确保你的ListView的ItemsSource绑定到了包含Id的数据集就行,每个列表项会自动继承对应的数据上下文。比如你的XAML可以改成这样:

<ListView x:Name="ListItems" 
          IsItemClickEnabled="True" 
          ItemClick="ListItems_ItemClick"
          ItemsSource="{Binding YourDataList}">
    <!-- 这里是每个列表项的模板,根据你的需求展示内容就行 -->
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Title}" />
                <TextBlock Text="{Binding Description}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

2. 在点击事件里获取正确的数据项

点击事件的e.ClickedItem才是你点击的那一行对应的对象,你只需要把它转换成你的数据模型类型,就能轻松拿到Id了。假设你的数据模型类叫DataItem,代码应该改成这样:

private void ListItems_ItemClick(object sender, ItemClickEventArgs e)
{
    // 先做null检查,避免异常,同时转换成你的数据模型类型
    if (e.ClickedItem is DataItem selectedItem)
    {
        var targetId = selectedItem.Id;
        // 这里就可以用targetId做你需要的操作啦
    }
}

小提醒

  • 如果你不确定自己的数据模型类型,可以先加一行Debug.WriteLine(e.ClickedItem.GetType().Name),运行后看输出窗口就能知道实际类型了。
  • 养成对可能为空的对象做null检查的习惯,这能帮你避免很多类似的空引用异常哦!

内容的提问来源于stack exchange,提问作者Allan N Crystal Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:23