ListBox和listitems的wpf嵌套数据绑定
我是WPF和数据绑定的新手。我需要将expander头绑定到一个列表(名称),将expander内容绑定到一个列表(服务)。在阅读了有关数据绑定的MS教程(如何以及在何处使用staticResource、Path等)后,我更加困惑 我有一个ListBox和listitems的wpf嵌套数据绑定,wpf,vb.net,xaml,data-binding,Wpf,Vb.net,Xaml,Data Binding,我是WPF和数据绑定的新手。我需要将expander头绑定到一个列表(名称),将expander内容绑定到一个列表(服务)。在阅读了有关数据绑定的MS教程(如何以及在何处使用staticResource、Path等)后,我更加困惑 我有一个 ------------- class Person name as string List servies as List (Of Services) end class -------------- class Service name as
-------------
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 >
如何将标题文本块绑定到人名,将内部列表框项绑定到其服务?由于您使用的是对象列表,因此需要使用
ItemsControl
。Expander只能处理一个DataContext,而ItemsControl用于处理列表或集合
您的代码应该如下所示:
<ItemsControl ItemsSource="{Binding PersonList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Name}">
<ListBox ItemsSource="{Binding Services}" />
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这将创建一个循环,表示遍历PersonList,并为每个人生成一个扩展程序,其标题等于该人的姓名,扩展内容等于显示该人所有服务的列表框。我无法引用Application.vb中的变量,我如何在此处调用它们,或者有没有一种方法可以通过在XAML中只使用{Binding}以编程的方式实现这一点?我不确定我是否理解您的意思。任何包含
ItemsControl
的容器都应该将其DataContext
设置为您的人员列表。例如,您可以将Me.MainWindow.DataContext=p1
放入主窗口的已加载事件中。一旦设置了DataContext,您就可以访问该DataContext的任何属性,因此如果您的DataContext是Person对象,那么您可以使用{Binding Name}
或Person.Services
通过{Binding Services}
绑定到Person.Name
嘿,谢谢!我只是想知道什么是DataContext。我照你说的做了,推翻了toString方法,它成功了!一个跟进,一个问题,我把所有这些东西放在一个盒子里。这个网格可以有多个数据上下文吗?不,一个网格一次只能有一个数据上下文。但是,您可以为网格的每个子控件设置不同的DataContext,并且可以通过RelativeSource
或ElementName
绑定引用DataContext之外的属性