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

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

Barbara Streisand
リリース: 2025-01-22 08:22:09
オリジナル
245 人が閲覧しました

How Can I Dynamically Bind a Variable Number of Columns to a WPF DataGrid in XAML?

XAML の可変数の列を使用した WPF DataGrid の動的バインディング

WPF アプリケーションでは、データ列の数が変更されることがよくあります。このようなデータを DataGrid にバインドするのは、特にプログラムで列を生成する場合に困難になる場合があります。この記事では、XAML で列の動的バインディングを実装する方法について説明します。

典型的な WPF シナリオでは、列をデータにバインドするには、DataGridTextColumn の作成と、その Binding プロパティと Header プロパティの設定が含まれます。ただし、DataGrid の Columns プロパティは読み取り専用であり、直接バインドすることはできません。

この制限を克服するために、バインドされたコレクションが変更されたときに DataGrid 列を更新する BindableColumns と呼ばれる追加プロパティを導入しました。例は次のとおりです:

<DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid>
ログイン後にコピー

この XAML では、BindableColumns 添付プロパティを DataGridColumn オブジェクトの ObservableCollection にバインドします。 DataGrid は、バインドされたコレクション内の変更をリッスンし、独自の Columns プロパティを自動的に更新します。

BindableColumns の追加プロパティは次のように定義されます:

public class DataGridColumnsBehavior
{
    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)
    {
        // 实现根据集合更改更新DataGrid列
    }
}
ログイン後にコピー

このメソッドを使用すると、データ列の数や構造が変わった場合でも、列を WPF DataGrid に動的にバインドできます。コードが簡素化され、アプリケーションがより柔軟にデータを表現できるようになります。

以上がXAML で可変数の列を WPF DataGrid に動的にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート