Xamarin Forms中ListView字典项点击后获取键值对的问题
解决Xamarin ListView绑定字典后获取选中项的键和值问题
嘿,我明白你现在遇到的困扰啦!你之前的问题出在类型转换的方向错了——当你把Dictionary<string, string>绑定到ListView时,ListView并不会把整个字典作为列表项,而是会遍历字典里的每一个KeyValuePair<string, string>,所以你选中的每一项都是一个单独的键值对对象,而不是整个字典。
你打印args.Item.GetType得到System.Collections.Generic.KeyValuePair2[System.String,System.String],这已经给了你明确的提示!之前你试图把它转成Dictionary<string, string>`,类型不匹配自然会得到null。
下面是修正后的代码,直接把选中项转为KeyValuePair<string, string>就能轻松获取键和值:
public async void OnSelectedLanguages(object obj, ItemTappedEventArgs args) { // 先判断类型并转换 if (args.Item is KeyValuePair<string, string> selectedLangPair) { string languageName = selectedLangPair.Key; // 对应你看到的"japan" string languageCode = selectedLangPair.Value; // 对应"ja" Console.WriteLine($"选中的语言:{languageName},代码:{languageCode}"); } }
如果你的项目使用的是较旧版本的C#,不支持模式匹配的话,可以用另一种写法:
public async void OnSelectedLanguages(object obj, ItemTappedEventArgs args) { var selectedLangPair = args.Item as KeyValuePair<string, string>?; if (selectedLangPair.HasValue) { string languageName = selectedLangPair.Value.Key; string languageCode = selectedLangPair.Value.Value; Console.WriteLine($"lang key: {languageName}, value: {languageCode}"); } }
这样就能顺利把"japan"和"ja"存入对应的变量里啦!
内容的提问来源于stack exchange,提问作者mkis
相关产品推荐
相关产品推荐

