C# UWP ListView选中项获取失效,求多选遍历传参方案
我完全懂你这种在新版本框架里找不到熟悉属性的抓狂感——毕竟微软对WinUI/UWP的API确实做了不少调整。别担心,咱们一步步搞定这个多选ListView的项获取、文本拼接和页面导航的问题:
1. 先确保你的ListView配置了正确的多选模式
这是基础前提,如果没开多选,后面的操作全白搭。在XAML里给ListView设置SelectionMode:
<ListView x:Name="MyMultiSelectListView" SelectionMode="Multiple"> <!-- 这里放你的ItemTemplate和数据源绑定 --> </ListView>
可选的SelectionMode值还有Extended(支持按住Ctrl/Shift批量选择),根据你的需求选就行。
2. 正确遍历选中项并拼接文本
最新的WinUI/UWP框架里,SelectedItems属性其实是可用的,但它返回的是IReadOnlyList<object>类型,所以需要做个类型转换。分两种情况:
情况1:ListView绑定的是字符串集合
直接把遍历到的项转成字符串就行:
using System.Text; // 初始化字符串构建器,高效拼接文本 var selectedTextBuilder = new StringBuilder(); foreach (var selectedItem in MyMultiSelectListView.SelectedItems) { if (selectedItem is string itemText) { // 给非第一个项加分隔符(比如逗号) if (selectedTextBuilder.Length > 0) { selectedTextBuilder.Append(", "); } selectedTextBuilder.Append(itemText); } } // 得到最终拼接好的字符串 var combinedSelectedText = selectedTextBuilder.ToString();
情况2:ListView绑定的是自定义实体类
比如你有个Product类,里面有ProductName属性,那就转成对应的实体类型:
using System.Text; var selectedTextBuilder = new StringBuilder(); foreach (var selectedItem in MyMultiSelectListView.SelectedItems) { if (selectedItem is Product product) { if (selectedTextBuilder.Length > 0) { selectedTextBuilder.Append(", "); } selectedTextBuilder.Append(product.ProductName); } } var combinedSelectedText = selectedTextBuilder.ToString();
拿到拼接后的字符串后,直接用导航方法传递参数就行:
// 跳转到第二个页面,把拼接好的文本作为参数传递 Frame.Navigate(typeof(SecondPage), combinedSelectedText);
然后在第二个页面的OnNavigatedTo方法里接收参数:
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // 检查参数类型并使用 if (e.Parameter is string receivedText) { // 比如把文本显示在TextBlock里 ResultTextBlock.Text = receivedText; } }
额外排查点:如果SelectedItems还是没反应?
- 检查ListView的
IsItemClickEnabled属性,如果设为true会干扰多选,确保它是false(默认就是false)。 - 确认你的数据源绑定没有问题,比如有没有正确设置
ItemsSource,实体类的属性有没有实现INotifyPropertyChanged(如果需要动态更新的话)。
内容的提问来源于stack exchange,提问作者Nathan Whitchurch
相关产品推荐
相关产品推荐

