Maison >développement back-end >C++ >Comment lier dynamiquement des colonnes à un DataGrid WPF ?
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!