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
列表,它显示每个 TestGroup
的 Name
,这按预期工作。对于第二个列表框,我想将它绑定到 TestPackages
列表并让它显示所有 TestPackage
Name
来自 TestGroup
和 TestGroups
列表。
数据上下文在代码隐藏中设置如下:
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
列表中第一个 TestGroup
中 TestPackages
中的所有 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
列表中每个 TestGroup
中 TestPackages
中的第一个 Name
。
我做错了什么或者我错过了什么?
非常感谢任何帮助。谢谢!
通过XAML,是否可以将TestGroups
内TestPackages
内的所有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>
我创建了一个名为 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
列表,它显示每个 TestGroup
的 Name
,这按预期工作。对于第二个列表框,我想将它绑定到 TestPackages
列表并让它显示所有 TestPackage
Name
来自 TestGroup
和 TestGroups
列表。
数据上下文在代码隐藏中设置如下:
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
列表中第一个 TestGroup
中 TestPackages
中的所有 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
列表中每个 TestGroup
中 TestPackages
中的第一个 Name
。
我做错了什么或者我错过了什么?
非常感谢任何帮助。谢谢!
通过XAML,是否可以将TestGroups
内TestPackages
内的所有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>