ホームページ >バックエンド開発 >C++ >列を WPF DataGrid に動的にバインドするにはどうすればよいですか?

列を WPF DataGrid に動的にバインドするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-22 08:26:10997ブラウズ

How to Dynamically Bind Columns to a WPF DataGrid?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。