2017-02-12 68 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>