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

如何在foreach循环中获取WPF ListViewItem的Content内容

解决WPF ListView多选内容获取问题

你的问题核心是遍历SelectedItems时没有正确提取ListViewItem的Content属性,而是直接调用ToString()方法,导致输出包含类型前缀。以下是修正后的实现:

正确的事件处理代码

private void myListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    tb.Clear(); // 清空TextBox,避免新旧内容叠加
    StringBuilder sb = new StringBuilder();
    
    foreach (var selectedItem in myListView.SelectedItems)
    {
        if (selectedItem is ListViewItem item)
        {
            // 获取Content并添加到字符串构建器,用空格分隔
            sb.Append($"{item.Content.ToString()} ");
        }
    }
    
    // 移除末尾多余的空格,再写入TextBox
    if (sb.Length > 0)
    {
        sb.Length--;
    }
    tb.Text = sb.ToString();
}

代码说明

  • 替换item.ToString()为item.Content.ToString():直接获取ListViewItem的Content属性值,彻底避免输出类型前缀。
  • 使用StringBuilder拼接字符串:比多次调用AppendText更高效,尤其当选中项数量较多时。
  • 处理多余空格:循环中给每个项后加空格,最后移除末尾空格,保证输出格式为Item 1 Item 2而非Item 1 Item 2 。
  • 先清空TextBox:每次选中状态变化时重置内容,避免重复追加。

简化写法(LINQ实现)

如果熟悉LINQ,可以用更简洁的方式完成:

private void myListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    var selectedContents = myListView.SelectedItems
        .OfType<ListViewItem>()
        .Select(item => item.Content.ToString())
        .ToList();
    
    tb.Text = string.Join(" ", selectedContents);
}

通过LINQ筛选并提取所有选中项的Content,再用string.Join直接拼接成目标格式,代码更简洁直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:57:12