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
相关产品推荐
相关产品推荐

