2017-06-14 2 views
0

J'ai une donnée composée de List, qui à son tour a une liste. Comment puis-je afficher un LeafSide spécifique?Accéder à une liste spécifique de listes dans un DataGrid

ViewModel:

private List<Leaf> _Leaves = new List<Leaf>(); 
    public List<Leaf> Leaves 
    { 
     get { return _Leaves; } 
     set 
     { 
      _Leaves = value; 
      NotifyPropertyChanged(); 
     } 
    } 

Structure des données:

class Leaf : NotifyBase 
{ 
    private string _LeafNo; 
    public string LeafNo 
    { 
     get { return _LeafNo; } 
     set 
     { 
      _LeafNo = value; 
      NotifyPropertyChanged(); 
     } 
    } 
    private List<LeafSide> _Side = new List<LeafSide>(); 
    public List<LeafSide> Side 
    { 
     get { return _Side; } 
     set 
     { 
      _Side = value; 
      NotifyPropertyChanged(); 
     } 
    } 
    //More stuff 
} 
class LeafSide : NotifyBase 
{ 
    private string _Notes; 
    public string Notes 
    { 
     get { return _Notes; } 
     set 
     { 
      _Notes = value; 
      NotifyPropertyChanged(); 
     } 
    } 
    //More stuff 
} 

Vue:

<DataGrid ItemsSource="{Binding Leaves}"> 
<DataGrid.Columns> 
    <DataGridTextColumn Width="auto" MinWidth="50" Header="Notes" Binding="{Binding Side/Notes}"/> 
    <DataGridTextColumn Width="50" Header="Punch" Binding="{Binding Side/Punch}"/> 
    <!--More--> 
</DataGrid.Columns> 

DataGrid ci-dessus affiche la première LeafSide parfaitement bien, mais je ca Pour la vie de moi, je ne sais pas comment faire pour afficher le deuxième côté. Tous les exemples que je peux trouver de DataGrids et des listes imbriquées doivent afficher des valeurs spécifiques d'une liste. Je m'y attendais quelque chose comme

<DataGridTextColumn Width="auto" MinWidth="50" Header="Notes" Binding="{Binding Side[1]/Notes}"/> 

au travail, mais il ne fonctionne pas.

EDIT Plus d'info: J'ai besoin DataGrid à afficher: Seperate DataGrids for Leaf and LeafSide[0] displayed mais aussi pour LeafSide [1]

+0

'{Binding Side [1] .Notes}' devrait fonctionner. Et s'il y a plus d'éléments? – ASh

+0

@ASh Il génère simplement une colonne vide avec le même nombre d'éléments que dans LeafNo – AGarcia

+0

@ASh nevermind, mal interprété votre commentaire. Cela a fonctionné parfaitement. Je vous remercie. – AGarcia

Répondre

0

ASh a fourni la réponse, juste reposter je peux marquer comme Answered

DROIT {Reliure côté [1] .Notes}

WRONG {Côté de liaison [1]/Notes}

0

Je recommande de créer une propriété appelée 'SelectedSide' dans 'Leaf' et utiliser celui-ci pour la liaison

private LeafSide _selectedSide;   
    public LeafSide SelectedSide 
    { 
     get { return _selectedSide; } 
     set { _selectedSide = value; NotifyPropertyChanged("SelectedSide"); } 
    } 

Je suppose que '[1]' est associé à LeafNo. Si oui régler la SelectedSide = côtés [LeafNo]

<DataGridTextColumn Width="auto" MinWidth="50" Header="Notes" Binding="{Binding SelectedSide.Notes}"/> 
+0

Je dois afficher les informations dans Side pour chaque feuille. ie: 1,/quelques notes/2,/quelques notes plus/etc – AGarcia