2017-10-10 125 views
0

所以基本上我有一個包含另一個對象列表的對象列表。可以說我有一個對象列表Class。並且類包含一個Students的列表。每個學生都有一個屬性Name作爲一個簡單的字符串。將複雜數據綁定到ItemsControl

所以基本上我想要的是以下內容: 用戶可以使用組合框選擇一個類。

<ComboBox ItemsSource="{Binding Path=Classes}" DisplayMemberPath="Name" /> 

這是行得通的。

從組合框選擇一個項目後,用戶將看到該類別每個學生的名單(還記得財產NameStudents

我創建用於該目的的簡單的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> 

我的問題是:我如何訪問我的標籤中的學生姓名?

回答

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視圖模型屬性一個快速和骯髒的方法,你也可以直接訪問組合框的的SelectedItem是這樣的:

<ComboBox x:Name="cbClasses" ItemsSource="{Binding Classes}" ... /> 

<ItemsControl ItemsSource="{Binding SelectedItem.Students, ElementName=cbClasses}"> 
...