2010-10-19 4 views
0

J'ai une collection d'objets Person que je veux afficher dans une Datagrid WPF. La définition de classe pour Person est:Largeurs de cellules verticales de différentes tailles dans un contrôle WPF Datagrid

class Person { 
    string Name; 
    int Age; 
    List<string> FavoriteFoods; 
} 

Je veux afficher une collection de Personnes dans une table. Parce qu'une personne peut avoir plusieurs aliments préférés, je veux que tous ces aliments préférés dans une seule cellule soient empilés verticalement dans la colonne «Aliments favoris» pour chaque personne. Existe-t-il un moyen facile de lier ma collection d'objets Person à une Datagrid pour accomplir ceci?

+0

Je pense que par "la largeur des cellules verticales" signifient "hauteurs de cellule." –

+0

Je ne vois pas où j'ai dit ça, mais oui, c'est ce que je voulais dire. – Matthew

Répondre

2

Oui. Utilisez un DataGridTemplateColumn pour la colonne "FavoriteFoods" et dans le modèle, utilisez simplement un ItemsControl pour afficher la collection. Quelque chose comme ceci:

XAML:

<DataGrid x:Name="dg" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Name}" Header="Name"/> 
     <DataGridTextColumn Binding="{Binding Age}" Header="Age"/> 
     <DataGridTemplateColumn Header="Foods"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ItemsControl ItemsSource="{Binding FavoriteFoods}"/> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

code-behind:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     List<Person> persons = new List<Person>(); 

     Person p1 = new Person() { Name = "Person1", Age = 1 }; 
     p1.FavoriteFoods.Add("Food1"); 
     p1.FavoriteFoods.Add("Food2"); 
     p1.FavoriteFoods.Add("Food3"); 
     p1.FavoriteFoods.Add("Food4"); 

     Person p2 = new Person() { Name = "Person2", Age = 2 }; 
     p2.FavoriteFoods.Add("Food1"); 
     p2.FavoriteFoods.Add("Food2"); 

     Person p3 = new Person() { Name = "Person3", Age = 3 }; 
     p3.FavoriteFoods.Add("Food1"); 
     p3.FavoriteFoods.Add("Food2"); 
     p3.FavoriteFoods.Add("Food3"); 

     persons.Add(p1); 
     persons.Add(p2); 
     persons.Add(p3); 

     dg.ItemsSource = persons; 
    } 
} 

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public List<string> FavoriteFoods { get; private set;} 

    public Person() 
    { 
     FavoriteFoods = new List<string>(); 
    } 
} 
+0

Wow, je dois juste commenter sur la qualité de cette réponse. Rapide, concis et un exemple parfait. Merci karmicpuppet. – Matthew

Questions connexes