如何在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
相关产品推荐
相关产品推荐

