WPF DataGrid で列を動的にバインドする方法
WPF DataGrid は強力な表形式データ表示コントロールですが、その処理方法は列数が可変のデータ ソースでは直感的ではありません。この記事では、XAML のデータ バインディングを使用してこの機能を実現する方法について説明します。
問題の説明
簡略化した例では、オブジェクトの Data
リスト (列メタデータ用) と 2D 配列 ColumnDescription
(実際のデータ用) を含む Rows
というクラスがあります。このデータを WPF DataGrid にバインドしたいのですが、ColumnDescription
オブジェクトに基づいて列を動的に作成する必要があります。
コードソリューション
現在のコードでは for ループを使用してプログラム的に列を追加していますが、データ バインディングと添付プロパティを使用して XAML で宣言的に同じ結果を得ることができます。
追加属性:
値として BindableColumns
を受け入れる ObservableCollection<DataGridColumn>
という追加のプロパティを定義します。このプロパティは、ObservableCollection
が変更されたときに DataGrid の Columns
コレクションを更新する役割を果たします。
<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>
XAML バインディング:
ObservableCollection<DataGridColumn>
を作成し、その BindableColumns
添付プロパティを DataGrid の Columns
プロパティに設定します。
<code class="language-xml"><DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid></code>
イベント処理:
添付プロパティの BindableColumnsPropertyChanged
ハンドラーでは、既存の列をクリアし、ObservableCollection
から新しい列を追加し、将来の変更を処理するためにその CollectionChanged
イベントをサブスクライブします。
このアプローチにより、データの変更に基づいて DataGrid の列を動的に管理できるようになり、手動で列コードを作成する必要がなくなります。
以上が列を WPF DataGrid に動的にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。