Maison >développement back-end >C++ >Comment lier dynamiquement des colonnes à un DataGrid WPF ?

Comment lier dynamiquement des colonnes à un DataGrid WPF ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-22 08:26:10950parcourir

How to Dynamically Bind Columns to a WPF DataGrid?

Comment lier dynamiquement des colonnes dans WPF DataGrid

WPF DataGrid est un puissant contrôle d'affichage de données tabulaires, mais sa méthode de traitement n'est pas intuitive pour les sources de données avec un nombre variable de colonnes. Cet article explique comment obtenir cette fonctionnalité à l'aide de la liaison de données en XAML.

Description du problème

Dans un exemple simplifié, nous avons une classe appelée Data qui contient une ColumnDescription liste d'objets (pour les métadonnées de colonne) et un tableau 2D Rows (pour les données réelles) . Nous souhaitons lier ces données à un WPF DataGrid mais devons créer dynamiquement des colonnes basées sur des objets ColumnDescription.

Solution de code

Bien que le code actuel utilise une boucle for pour ajouter des colonnes par programme, nous pouvons obtenir le même résultat de manière déclarative en XAML en utilisant la liaison de données et les propriétés attachées.

Attributs supplémentaires :

Nous définissons une propriété supplémentaire appelée BindableColumns qui accepte un ObservableCollection<DataGridColumn> comme valeur. Cette propriété est responsable de la mise à jour de la collection ObservableCollection du DataGrid lorsque le Columns change.

<code class="language-csharp">public class DataGridColumnsBehavior
{
    // 附加属性,用于将 DataGridColumns 集合绑定到目标元素上的属性
    public static readonly DependencyProperty BindableColumnsProperty =
        DependencyProperty.RegisterAttached("BindableColumns",
                                            typeof(ObservableCollection<DataGridColumn>),
                                            typeof(DataGridColumnsBehavior),
                                            new UIPropertyMetadata(null, BindableColumnsPropertyChanged));

    private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        // 为简洁起见,省略实现
    }
}</code>

Liaison XAML :

Nous créons un ObservableCollection<DataGridColumn> et définissons sa propriété attachée BindableColumns à la propriété Columns du DataGrid.

<code class="language-xml"><DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid></code>

Gestion des événements :

Dans le gestionnaire BindableColumnsPropertyChanged de la propriété attachée, nous effaçons les colonnes existantes, ajoutons de nouvelles colonnes de ObservableCollection et nous abonnons à ses événements CollectionChanged pour gérer les modifications futures.

Cette approche nous permet de gérer dynamiquement les colonnes du DataGrid en fonction des modifications de données et évite d'avoir à créer manuellement du code de colonne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn