【问题标题】:Adding a PSObject to Listbox, but displaying only one of the properties将 PSObject 添加到列表框,但仅显示其中一个属性
【发布时间】:2018-02-12 15:24:43
【问题描述】:

我想将一个包含多个属性(确切地说是三个)的 PSObject 添加到列表框,但只显示其中一个属性。当我将整个 PSobject 添加到列表框时,它会显示所有属性,如下所示:

@{Property1="Something", Property2="Something Else", Property3="Something"}

假设 property1 是我希望用户看到的属性,那么列表框中的相同对象行应该如下所示:

Something

解决此问题的一种方法是将 PSObject 的特定属性添加到列表框中,但我希望每一行代表一个唯一的对象。因此,即使某些 PSObject 彼此共享它们的 property1 值,我仍然能够准确地知道在列表框中选择了哪些 PSObject。如果我只向列表框添加一个属性,我无法知道这一点。

例如,可能有两个对象的 property1 的值为“Something”,但其中一个对象的 property2 设置为“Something Else”,而另一个对象的 property2 设置为“A Third Something”。列表框应该以相同的方式显示两个对象,即:

Something
Something

但列表框应该知道所选项目的 property2 是否设置为“Something else”或“A Third Something”,即使用户无法分辨。

【问题讨论】:

  • Viktor Axén,请编辑您的帖子并添加您正在运行的代码。如果我们看不到代码,那么我们将不知道您的程序出了什么问题。谢谢
  • 您是否尝试将DisplayMemberPath="Property1" 添加到标记中的ListBox 控件?
  • @CoryEtmund,我的代码并没有真正出错,问题是我不知道如何编写我想要的代码。我当前的代码正在运行,只是没有达到我想要的目的。
  • 您在代码中如何以及在何处创建实际的 ListBox?

标签: wpf powershell listbox psobject


【解决方案1】:

尝试将 ToString() 脚本方法添加到输出相关属性的 PSObject。

$p=[pscustomobject]@{a=1;b='hello'}
$p | add-member -membertype ScriptMethod -name ToString -value {$this.b} -force

添加项目后,列表框将使用其 ToString() 方法来选择要显示的内容。

【讨论】:

  • 谢谢。但是如果我想改变列表框显示的值呢?
  • 是的,我只是尝试阅读脚本方法,并且它有效,但我觉得应该有一个更优雅更好的方法来做到这一点。
  • 您可以添加一个名为“ItemToDisplay”的属性,然后在 ToSTring() 方法中添加 $this.($this.ItemToDisplay)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多