【问题标题】:How to get the text of selected items in listbox?如何获取列表框中所选项目的文本?
【发布时间】:2019-11-24 09:37:21
【问题描述】:

我正在尝试从我的列表框中获取所选项目的文本,如下图所示:

但我只能获取所选项目的类型,如下图所示:

这是我将所选项目转换为字符串的代码

String selectedPackage = "";
foreach (object packages in packageListBox.SelectedItems)
{
    selectedPackage += (selectedPackage == "" ? "" : "\n") + packages.ToString();
}

有没有办法将实际的“Test123”和“Test321”文本转换为字符串?

【问题讨论】:

  • type 将您的 packages 变量转换为 WPF.Models.Package 然后您应该能够访问它的属性。
  • 这能回答你的问题吗? Get text of selected items in a ListBox
  • 你能分享你的 xaml 和 Package 模型吗?
  • 下面的答案完成了工作

标签: c# wpf


【解决方案1】:

使用 LINQ Select 方法从包集合中获取字符串集合。然后加入字符串:

string selectedPackages = string.Join("\n",
    packageListBox.SelectedItems.Cast<Package>().Select(p => p.PackageText));

PackageText 替换为实际的文本属性。

【讨论】:

    【解决方案2】:

    这是因为您正在获取模型对象的字符串表示形式,在您的情况下为 Package。在访问所需的属性包实例之前,您可以执行以下操作来提取 ListBox 的选定项。

    String selectedPackage = "";
    foreach (object packages in packageListBox.SelectedItems)
       {
          var package = packages as Package
          if (package !=null)
           {
              //You can now use package object to extract the property you want.
           }
       }
    

    【讨论】:

    • 比使用as 更好,使用像var package = (Package)packages; 这样的显式转换。因此,如果由于某种原因所选项目不是包,您将正确获得 InvalidCastException。
    • 没错。但是拥有“as”的想法是同时捕获无效的强制转换和空值。也就是说,如果存在 null 作为列表元素。 'as' 将确保您列出的方案和可能的 null。
    • SelectedItems 集合从不包含空项目。即使可以,显式转换仍然有效。那么使用as 操作符就更没有意义了。实际上,在适合显式转换的情况下始终使用 as 只是一个坏习惯。
    • @Clemens,请注意您的回答可能会导致 ArgumentNullException 源(有界实例)为空。 docs.microsoft.com/en-us/dotnet/api/…
    • 你为什么这么认为? SelectedItems 属性永远不会为空。如果你这么认为,为什么你的代码不能处理这种情况?
    猜你喜欢
    • 2012-11-16
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2011-09-25
    相关资源
    最近更新 更多