2017-10-19 31 views
0

J'ai un DataGrid. Très simple:Liste d'insertion <string> d'éléments dans DataGrid-Column-Index 2

<DataGrid Width="320" Height="340" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Filter" Width="Auto"/> 
      <DataGridTextColumn Header="Name" Width="*"/> 
     </DataGrid.Columns> 
    </DataGrid> 

Maintenant, j'ai besoin d'insérer une liste de chaînes dans la deuxième colonne. Je cherchais une bonne solution mais je n'ai pas pu trouver un bon. J'ai pensé à le faire avec une liaison, mais je ne pouvais pas le faire fonctionner pour remplir seulement la deuxième colonne.

Dans la première colonne, je souhaite placer des cases à cocher devant chaque élément de chaîne.

Merci à l'avance :)

+0

Voulez-vous dire que vous voulez que la deuxième colonne d'une rangée contienne une liste de chaînes? – Redouane

+0

@Redouane Oui, il y a environ 70 entrées dans la liste. Ceux-ci devraient être affichés dans les lignes sous l'en-tête de la deuxième colonne. – Niclas

Répondre

0

Vous pouvez créer manuellement des colonnes et pour la deuxième colonne utiliser DataGridTemplateColumn et fournir un ItemsControl (ou tout contrôle qui en héritage) comme DataGridTemplateColumn.CellTemplate comme ceci:

<DataGrid Margin="4" AutoGenerateColumns="False" ItemsSource="{Binding Models}"> 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Header="CheckBox Column Header" Binding="{Binding BindToBooleanPropertyFromModel}"></DataGridCheckBoxColumn> 
      <DataGridTemplateColumn Header="List of strings"> 
       <DataGridTemplateColumn.CellTemplate> 
        <ItemContainerTemplate> 
         <ItemsControl ItemsSource="{Binding BindToListPropertyFromModel}"> 
         </ItemsControl> 
        </ItemContainerTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

J'utilise BindToBooleanPropertyFromModel et BindToListPropertyFromModel comme des espaces réservés à un nom de propriété de type bool et la propriété de type IEnumrable<T> liste des détenteurs de chaînes respectivement.

+0

Salut, merci pour ça. Une dernière question: Pourriez-vous m'expliquer comment je crée correctement une liaison? La partie XAML est claire mais que dois-je faire d'autre part? Est-ce que je mets simplement une méthode (Property) derrière ItemSource et ça marche? Ou dois-je faire autre chose dans mon fichier .cs? – Niclas

+0

Utilisez-vous le modèle ViewModel et Models? qu'est-ce que vous utilisez comme source de données pour remplir le 'DataGrid'? – Redouane

+1

Je l'ai compris :) – Niclas