2012-05-18 1 views
1

ContexteComment lier une liste d'objets à un DataGrid?

J'essaie de lier mes objets à un DataGrid

J'ai une liste des objets PhoneVM. Chaque élément de la liste contient une liste de StringBindingData. J'ai besoin chaque élément StringBindingData pour correspondre à une autre cellule dans une rangée d'un DataGrid

Chaque élément int il liste correspond à une valeur différente pour la configuration d'un utilisateur, y compris Description et Value.

PhoneVM est défini comme:

public class PhoneVM 
{ 
    public List<StringBindingData> StringBindingData { get; private set; } 

    public PhoneVM() 
    { 

    } 
} 

et StringBindingData est défini comme:

public class StringBindingData : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public string Description { get; set; } 

    private string _value; 
    public string Value 
    { 
     get { return _value; } 
     set 
     { 
      OnPropertyChanged("Value"); 
     } 

    } 

    public StringBindingData(string data, string description) 
    { 
     Value = data; 
     Description = description; 
    } 

    internal void OnPropertyChanged(string prop) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
     } 
    } 
} 

La propriété Description du premier élément de la liste StringBindingData peut contenir « Nom » et la propriété de valeur serait contient le nom réel. La propriété Description du deuxième élément de la liste peut contenir "Numéro de téléphone" et la propriété Valeur contiendra le nombre réel.

Question

Je veux obtenir ces de se lier à un DataGrid. Comment puis-je faire ceci?

Ce que j'ai à ce jour est une tentative de lier la première colonne au nom

<DataGrid Name="phoneGrid" AutoGenerateColumns="False" Height="150" Width="Auto" 
      SelectionMode="Single" SelectionUnit="FullRow" Margin="10,10,0,0" 
      HorizontalAlignment="Left" VerticalAlignment="Top" SelectionChanged="phoneGrid_SelectionChanged"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Name" 
      x:Name="columnPhoneNumber" 
      Binding="{Binding Path=Value}" 
      IsReadOnly="True"> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Avec cela dans le code sous-jacent:

public Phone(List<PhoneVM> phoneVm) 
{ 
    InitializeComponent(); 

    phoneGrid.DataContext = phoneVm; 
} 

Mais en regardant le code, il est évidemment faux . Je ne sais pas comment spécifier pour le DataContext que je veux qu'il obtienne les objets StringBindingData de phoneVm et prenne les données de cela.

Y at-il quelque chose que je dois ajouter au XAML pour que cela fonctionne? Y a-t-il autre chose que je peux ajouter au code? Ai-je besoin de changer mon modèle de données?

Répondre

1

Comme vous le dites, il vous manque la liaison à la propriété StringBindingData dans votre modèle de vue. Essayez d'ajouter ItemsSource="{Binding StringBindingData}" à votre DataGrid.

+0

Cela fait l'affaire en ce qui concerne l'accès aux données dans la grille. Malheureusement, il affiche les données verticalement plutôt qu'horizontalement, c'est-à-dire sous la forme d'une colonne plutôt que comme une rangée. – DaveDev

Questions connexes