2017-02-12 67 views
0

我正在構建一個能顯示您的成績的學校應用程序。 我有以下數據結構:ListView綁定到列表裏面列表

public class Rootobject 
{ 
    public List<Subject> subjects{ get; set; } 
} 

public class Subject 
{ 
    public String name { get; set; } 
    public int id { get; set; } 
    public String teacher { get; set; } 
    public GradeSet wirtten { get; set; } 
    public GradeSet spoken { get; set; } 
    public float average { get; set; } 
} 

public class GradeSet 
{ 
    public float counts { get; set; } 
    public List<Grade> grades { get; set; } 
    public float average { get; set; } 
} 

public class Grade 
{ 
    public string name { get; set; } 
    public string grade { get; set; } 
} 

我已經從 「主題」

subjects = new ObservableCollection<Subject>(); 

的類型一個ObservableCollection我有3名列表視圖。一個顯示所有的主題(名字&老師)。這已經起作用了。 如何約束它:

<ListView Name="SubjectsListView" IsItemClickEnabled="True" ItemsSource="{x:Bind subjects}" ItemClick="FacherListView_ItemClick"> 
    <ListView.ItemTemplate> 
     <DataTemplate x:DataType="data:Subject"> 
      <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*" /> 
        <RowDefinition Height="*" /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="{x:Bind name}" FontSize="20" Margin="4,0,0,0" /> 
       <TextBlock Text="{x:Bind teacher}" Grid.Row="1" Margin="4,4,0,0" /> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

其他2名列表視圖,在第一,我想顯示的書面等級(名&檔次本身),第二,我想顯示的口語等級(等級本身的名稱&)。 書面和口語成績ListView看起來一樣,但我如何將成績和名字綁定到他們? 這是ListView控件:

<ListView Name="gradeView" Grid.Column="0" HorizontalContentAlignment="Stretch" Grid.Row="2" SelectionMode="None"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="4"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Name="GradeName" Text="The name of the grade" FontSize="20" FontWeight="Bold" /> 
        <TextBlock Name="GradeName" Text="the grade (B+)" FontSize="20" /> 
       </StackPanel> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

回答

1

由於每個學科的書面和口語等級你可以在「gradeView」的ItemsSource屬性綁定到了「SubjectsListView」的SelectedItem屬性:

<ListView Name="gradeView" Grid.Column="0" HorizontalContentAlignment="Stretch" Grid.Row="2" SelectionMode="None" 
        ItemsSource="{Binding SelectedItem.wirtten.grades, ElementName=SubjectsListView}"> 
    <ListView.ItemTemplate> 
     <DataTemplate x:DataType="data:Grade"> 
      <Grid Margin="4"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Name="GradeName" Text="{x:Bind name}" FontSize="20" FontWeight="Bold" /> 
        <TextBlock Name="GradeName" Text="{x:Bind grade}" FontSize="20" /> 
       </StackPanel> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

這幾乎是牛逼他同樣是第三個ListView。當您選擇在第一ListView相應科目然後

<ListView Name="gradeView2" Grid.Column="0" HorizontalContentAlignment="Stretch" Grid.Row="2" SelectionMode="None" 
        ItemsSource="{Binding SelectedItem.spoken.grades, ElementName=SubjectsListView}"> 

第二和第三ListView S的關係來填充:只要改變ItemsSource的路徑結合。

0

這是未經測試,但你可以嘗試添加一個嵌套的ListView顯示的成績,這樣的:

<ListView Name="SubjectsListView" 
      IsItemClickEnabled="True" 
      ItemsSource="{x:Bind subjects}" 
      ItemClick="FacherListView_ItemClick"> 
    <ListView.ItemTemplate> 
     <DataTemplate x:DataType="data:Subject"> 
      <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*" /> 
        <RowDefinition Height="*" /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="{x:Bind name}" 
          FontSize="20" 
          Margin="4,0,0,0" /> 


       <ListView IsItemClickEnabled="True" 
          ItemsSource="{x:Bind wirtten.grades}" 
          Grid.Row="1" 
          Margin="4,4,0,0"> 
        <ListView.ItemTemplate> 
         <DataTemplate x:DataType="data:Grade"> 
          <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="*" /> 
            <RowDefinition Height="*" /> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*" /> 
            <ColumnDefinition Width="Auto" /> 
           </Grid.ColumnDefinitions> 
           <TextBlock Text="{x:Bind name}" 
              FontSize="20" 
              Margin="4,0,0,0" /> 
           <TextBlock Text="{x:Bind grade}" 
              Grid.Row="1" 
              Margin="4,4,0,0" /> 
          </Grid> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 



      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>