2017-02-12 5 views
0

Ich baue eine Schule App, die Ihre Noten anzeigen kann. Ich habe folgendes Datastructure:ListView an Liste innerhalb Liste binden

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; } 
} 

Ich habe eine ObservableCollection von der Art der "Betreff"

subjects = new ObservableCollection<Subject>(); 

Ich habe 3 Listviews. Einer zeigt alle Fächer (Name & Lehrer). Das klappt schon. Wie ich es gebunden:

<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> 

In den anderen 2 Listviews

, in der ersten, möchte ich die geschriebenen Noten angezeigt werden (Name & die Klasse selbst), in der zweiten, möchte ich die gesprochenen Noten angezeigt werden (Name & die Klasse selbst). Die geschriebenen und gesprochenen Noten ListView sehen gleich aus, aber wie binde ich die Noten und Namen an sie? Dies ist der 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> 

Antwort

1

Da es eine schriftliche und gesprochene Grad pro Fach Sie könnten die ItemsSource Eigenschaft des „gradeView“ auf die SelectedItem Eigenschaft des „SubjectsListView“ binden:

<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> 

Es ist fast t er gleich für die dritte ListView. Ändern Sie einfach den Pfad der ItemsSource Bindung:

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

Die zweite und dritte ListView s dann aufgefüllt werden sollte, wie Sie ein entsprechendes Objekt in der ersten ListView wählen.

0

Dies ist nicht getestet, aber Sie könnten versuchen, eine verschachtelte Listview Addition der Noten angezeigt werden, wie folgt aus:

<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> 
Verwandte Themen