WPF 列表框绑定到对象的子属性列表

WPF Listbox Bind to subproperty List of Objects

我创建了一个名为 TestNumber 的 class,其中包含 public List<TestGroup> TestGroups {get; set;}。测试组 class 包含 public List<TestPackage> TestPackages {get; set;}public property string Name {get; set;}。测试包 class 包含 public string Name {get; set;}.

我有两个列表框。第一个列表框绑定到 TestGroups 列表,它显示每个 TestGroupName,这按预期工作。对于第二个列表框,我想将它绑定到 TestPackages 列表并让它显示所有 TestPackage Name 来自 TestGroupTestGroups列表。

数据上下文在代码隐藏中设置如下:

this.DataContext = TestNumber;

我尝试了以下代码来绑定第二个列表框:

  <ListBox Grid.Row="1"
           ItemsSource="{Binding Path=TestGroups/TestPackages}">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <TextBlock Text="{Binding Path=Name}" />
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>

这会显示 TestGroups 列表中第一个 TestGroupTestPackages 中的所有 Name

<ListBox ItemsSource="{Binding Path=TestGroups}"
         Grid.Column="4"
         Grid.Row="1">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Path=TestPackages/Name}" />
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

这仅显示 TestGroups 列表中每个 TestGroupTestPackages 中的第一个 Name

我做错了什么或者我错过了什么?

非常感谢任何帮助。谢谢!

通过XAML,是否可以将TestGroupsTestPackages内的所有Name填充到第二个列表框?嵌套的 ListBox 是通过 XAML 完成此操作的唯一方法(除了其他控件)吗?

如果您想在单个 ListBox 中显示所有 TestPackages,您必须在某处定义一个 属性 实际上 returns 所有 TestPackages

根据您当前的设置,您可以使用嵌套的 ListBox:

为每个 TestGroup 显示所有 TestPackages
<ListBox ItemsSource="{Binding TestGroups}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBox ItemsSource="{Binding TestPackages}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>