我是WPF和数据绑定的新手。我需要将扩展器头绑定到List(Of Names)和扩展器内容到List(Of Services)。阅读关于数据绑定的MS教程(如何以及在何处使用staticResource,Path等)后,我更加困惑。
我有一个
-------------
class Person
name as string
List servies as List (Of Services)
end class
--------------
class Service
name as string
end class
----------------
在我的主类Application.vb中,我有一个Person对象列表
p1 as List(of Person)
我将所有这些初始化为虚拟值。 在Application.xaml中,我有
<Expander Name="listBox4" VerticalAlignment="Top"
HorizontalAlignment="Left" Header=" {Binding}" Content="{Binding}" >
<Expander.HeaderTemplate >
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</Expander.HeaderTemplate>
<Expander.ContentTemplate>
<DataTemplate >
<ListBoxItem Content="{Binding}"/>
</DataTemplate>
</Expander.ContentTemplate>
</Expander >
如何将标题文本块与人名和内部列表框项绑定到其服务?
答案 0 :(得分:3)
由于您正在使用对象列表,因此需要使用ItemsControl
。扩展器只能处理一个DataContext,而ItemsControls只能处理列表或集合
您的代码应如下所示:
<ItemsControl ItemsSource="{Binding PersonList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Name}">
<ListBox ItemsSource="{Binding Services}" />
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这会创建一个循环,表示遍历PersonList,并为每个Person生成一个Expander,其Header等于Person的名称,Expanded Content等于ListBox,它显示所有Person的服务。