3 votes

Définition des numéros de colonne de la grille de données avec binding-WPF

J'ai un DataGrid dont une de ses colonnes est censée obtenir le numéro de série de la ligne dans la grille, le DataGrid est lié à la liste suivante :

public IList<xx> ListXX= new List<xx>();

La classe xx contient plusieurs variables qui se lient au reste des colonnes.

Comment lier le numéro de la colonne dans la liste à ma colonne dans DataGrid ?

2voto

Hodaya Shalom Points 785

J'ai résolu le problème de cette façon :

J'ai créé une liste de convertisseurs à indexer :

public class IndexConverter : IMultiValueConverter
{
    public object Convert(
        object[] values, Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        var xx= values[0] as xx;
        var listxx= values[1] as List<xx>;
        if (xx== null)
            return null;
        return (listxx.FindIndex(x => x == xx) + 1).ToString();
    }

    public object[] ConvertBack(
        object value, Type[] targetTypes,
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Dans la DataGrid, je lie la colonne avec MultiBinding :

 <DataGridTextColumn Header="#" IsReadOnly="True">
     <DataGridTextColumn.Binding>
           <MultiBinding Converter="{StaticResource indexConverter}">
                <Binding />
                 <Binding RelativeSource=
                     "{RelativeSource AncestorType={x:Type DataGrid}}"
                     Path="ItemsSource"></Binding>
            </MultiBinding>
     </DataGridTextColumn.Binding>
  </DataGridTextColumn>

1voto

Tabish Sarwar Points 1427

Avec les informations limitées que vous avez fournies. Je suppose que vous essayez de lier la liste à votre grille WPF. Vous pouvez utiliser ceci comme indiqué ci-dessous.

this.dataGrid1.ItemsSource = list;

Une autre chose est de s'assurer que dans votre XAML AutoGenerateColumn est défini à true.

si cela ne fonctionne pas. Publiez plus d'informations, par exemple, comment se présente votre XML et comment vous essayez de le lier en code.

1voto

WiiMaxx Points 1273

Si vous connaissez votre ListXX L'ordre des articles que vous pouvez faire quelque chose comme :

        <DataGrid>
            <DataGridTextColumn Header="#" IsReadOnly="True" Binding="{Binding LisXX[0]}"></DataGridTextColumn>
            <DataGridTextColumn Header="#" IsReadOnly="True" Binding="{Binding LisXX[5]}"></DataGridTextColumn>
            <DataGridTextColumn Header="#" IsReadOnly="True" Binding="{Binding LisXX[1]}"></DataGridTextColumn>
        </DataGrid>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X