所以基本上我有一个包含另一个对象列表的对象列表。假设我有一个对象列表Class
。而Class包含Students
的列表。每个学生都有一个属性Name
作为一个简单的字符串。
基本上我想要的是以下内容: 用户可以使用ComboBox选择一个类。
<ComboBox ItemsSource="{Binding Path=Classes}" DisplayMemberPath="Name" />
有效。
从该ComboBox中选择一个项目后,用户应该会看到该班级中每个学生的列表(请记住Name
中的属性Students
)
我为此创建了一个简单的ItemsControl。
<ItemsControl ItemsSource="{Binding Classes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="Name of the Student">
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我的问题是:如何访问我的标签中的学生姓名?
答案 0 :(得分:1)
您的视图模型应该具有SelectedClass
属性,可以通过将其绑定到ComboBox的SelectedItem
属性来更新:
<ComboBox ItemsSource="{Binding Classes}"
SelectedItem="{Binding SelectedClass}" .../>
然后,您可以将ItemsControl绑定到所选类的Students
集合,如下所示:
<ItemsControl ItemsSource="{Binding SelectedClass.Students}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
请注意,视图模型必须实现INotifyPropertyChanged接口,并在SelectedClass
更改时触发PropertyChanged事件。
在没有SelectedClass视图模型属性的快速而肮脏的方法中,您还可以直接访问ComboBox的SelectedItem,如下所示:
<ComboBox x:Name="cbClasses" ItemsSource="{Binding Classes}" ... />
<ItemsControl ItemsSource="{Binding SelectedItem.Students, ElementName=cbClasses}">
...