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

如何在ListView的ItemClick事件中获取点击项的GameID

解决ListView ItemClick事件中获取GameID的问题

嘿,我明白你现在遇到的困扰了——在ListView的点击事件里没法正确拿到目标游戏的GameID,对吧?咱们直接来解决这个问题:

核心解决方案:对ClickedItem进行类型转换

你的ListView绑定的是ObservableCollection<GameListObject>,所以e.ClickedItem本质上就是GameListObject的实例,根本不需要用ToString()方法(那只会返回类的名称)。你只需要把它强转为对应的类型,就能直接获取GameID了。

修改后的ItemClick方法代码如下:

private void gamehub_list_ItemClick(object sender, ItemClickEventArgs e)
{
    // 用is运算符安全地进行类型检查和转换
    if (e.ClickedItem is GameListObject selectedGame)
    {
        long targetGameId = selectedGame.GameID;
        Debug.WriteLine("点击的游戏ID:" + targetGameId);
        
        // 这里就可以使用targetGameId跳转到新页面,请求对应游戏的数据了
    }
}

为什么索引会返回-1?

你设置了SelectionMode="None",这意味着ListView不会维护任何选中项的状态,所以SelectedIndex自然会返回-1,这是完全正常的设计行为。所以不要试图通过索引去获取数据,直接使用ClickedItem才是正确的做法。

额外的代码优化建议

在你的gamehub_search_TextChanged方法里,你循环创建了新的GameListObject实例并添加到新集合里,这其实是多余的。你可以直接把反序列化后的集合转成ObservableCollection作为ItemsSource:

// 替换原来的foreach循环和GameList创建逻辑
var gamelistobjects = JsonSerializer.Deserialize<List<GameListObject>>(httpResponseBody);
ObservableCollection<GameListObject> gameList = new ObservableCollection<GameListObject>(gamelistobjects);
gamehub_list.ItemsSource = gameList;

这样不仅代码更简洁,还能保留每个GameListObject的完整数据(比如ReleaseDates),后续如果需要用到其他属性也会更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:32:38