3 votes

WPF DataGrid - Puis-je décorer mes POCOs avec des attributs pour avoir des noms de colonnes personnalisés ?

J'ai un DataGrid dans WPF et je le remplis de données comme ceci :

public enum Sharing
{
    Equal,
    SurfaceBased,
}

public class Data
{
    public bool Active { get; set; }
    public string Name { get; set; }
    public int Floor { get; set; }
    public Sharing Sharing { get; set; }
}
    public ObservableCollection<Data> _col = new ObservableCollection<Data>()
                                 {
                                  new Data(){Active = true, Name = "KRL", Floor = 0 },
                                  new Data(){Name = "DAT", Floor = 1},
                                  new Data(){Name = "TRE", Floor = 1},
                                  new Data(){Name = "DUO", Floor = 2},
                                 };

    public MainWindow()
    {
        InitializeComponent();

        grid.AutoGenerateColumns = true;
        grid.DataContext = _col;
        grid.ItemsSource = _col;
    }

Je me demandais si je pouvais utiliser certains attributs sur les énumérations et la classe POCO pour que le DataGrid les affiche (au lieu des noms de variables) sur les en-têtes et les ComboCox.

Quelque chose comme ça :

public enum Sharing
{
    [Name("This is a test")]
    Equal,
    [Name("This is a test 2")]
    SurfaceBased,
}

Est-ce possible ?

3voto

NoOne Points 489

OK. Voici la façon de procéder pour les en-têtes :

Vous ajoutez des attributs, comme Description à vos propriétés.

public class MyPOCO
{
    [Description("The amount you must pay")]
    public float Amount { get; set; }
}

Ensuite, dans une classe dérivée de DataGrid, vous faites ceci :

    protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e)
    {
        try
        {
            base.OnAutoGeneratingColumn(e);
            var propDescr = e.PropertyDescriptor as System.ComponentModel.PropertyDescriptor;
            e.Column.Header = propDescr.Description;
        }
        catch (Exception ex)
        {
            Utils.ReportException(ex);
        }
    }

Pour ajouter des noms personnalisés aux membres des énumérations, vous devez créer une colonne personnalisée. Vous pouvez voir un exemple simple ici : https://stackoverflow.com/a/17510660/964053 .

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