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

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();
3. 通过Frame.Navigate传递拼接好的文本

拿到拼接后的字符串后,直接用导航方法传递参数就行:

// 跳转到第二个页面,把拼接好的文本作为参数传递
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:16