2 votes

Afficher un numéro courant dans le RowHeader du DataGrid WPF

J'utilise WPF avec MVVM.

Comment puis-je lier :

  • une liste de chiffres
  • ou une liste d'objets clr avec le numéro de propriété
  • ou une liste de chaînes de caractères

dans mon ViewModel vers le RowHeader de la grille de données WPF ?

8voto

miliu Points 511

J'ai trouvé une solution élégante pour ce problème dans http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7d0cbdf2-dea3-4dd4-a570-08aa6c78d911 . Voici un récapitulatif :

<tk:DataGrid x:Name="dg" LoadingRow="dg_LoadingRow" ItemsSource="{Binding}">
    <tk:DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type tk:DataGridRow}}, Path=Header}"></TextBlock>
        </DataTemplate>
    </tk:DataGrid.RowHeaderTemplate>
</tk:DataGrid>

private void dg_LoadingRow(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
{
    e.Row.Header = (e.Row.GetIndex() + 1).ToString();
}

Cependant, je n'ai pas réussi à aligner à droite le numéro de l'en-tête de la ligne. L'ajout de HorizontalAlignment="Right" au bloc de texte n'a pas aidé. J'ai également essayé d'envelopper le bloc de texte dans un StackPanel et de définir cette propriété, mais cela ne fonctionne pas non plus. Avez-vous une idée ?

0voto

Agies Points 847

Vous pourriez adopter cette approche http://www.codeproject.com/KB/WPF/MVVM_DataGrid.aspx?msg=3241301

En fait, vous créez une liste qui se chargera de la numérotation pour vous, à condition que l'objet de T implémente ISequenceObject.

Si vous souhaitez aller dans l'autre sens, vous pouvez envisager de traiter l'événement LoadingRow et d'ajouter simplement 1 à une DataColumn connue. Cela ne romprait pas le concept de MVVM, car une colonne numérotée ne fait pas partie de la logique commerciale, mais de la présentation.

Pour rendre le DataGrid numéroté réutilisable, vous pouvez également hériter du DataGrid et créer votre propre DataGrid numéroté.

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