ホームページ > バックエンド開発 > C++ > XAML データ バインディングを使用して WPF DataGrid を可変数の列にバインドする方法

XAML データ バインディングを使用して WPF DataGrid を可変数の列にバインドする方法

Linda Hamilton
リリース: 2025-01-22 08:11:10
オリジナル
476 人が閲覧しました

How to Bind a WPF DataGrid to a Variable Number of Columns Using XAML Data Binding?

動的列 WPF DataGrid の XAML データ バインディング

WPF アプリケーションの設計では、DataGrid 内の可変数の列を含むデータ セットを表示する必要がある場合があります。 WPF ではプログラムでグリッド列を柔軟にカスタマイズできますが、列の数が多い場合、このアプローチは煩雑になる可能性があります。

この場合、データ バインディングを使用して XAML ファイル内で列を直接定義する方が良いでしょう。この記事では、BindableColumns という添付属性を作成することでこれを実現する回避策を検討します。

データモデル定義

まず、列と行の変更を表す単純な Data クラスを定義します。

public class Data
{
    public IList<ColumnDescription> ColumnDescriptions { get; set; }
    public string[][] Rows { get; set; }
}
ログイン後にコピー

追加属性の実装

追加属性 BindableColumns は、ObservableCollection<DataGridColumn> の変更を監視することで DataGrid の列を管理します。コレクションが変更されると、このプロパティはそれに応じて DataGrid の列を更新します。

public class DataGridColumnsBehavior
{
    public static readonly DependencyProperty BindableColumnsProperty = ...;

    public static void BindableColumnsPropertyChanged(...)
    {
        DataGrid dataGrid = source as DataGrid;
        ObservableCollection<DataGridColumn> columns = e.NewValue as ObservableCollection<DataGridColumn>;

        // 清除现有列
        dataGrid.Columns.Clear();

        // 添加新列
        if (columns != null)
        {
            foreach (DataGridColumn column in columns)
            {
                dataGrid.Columns.Add(column);
            }
            // 订阅集合更改事件
            columns.CollectionChanged += ...;
        }
    }
}
ログイン後にコピー

XAML バインディング

属性をアタッチしたので、XAML で DataGrid を ObservableCollection<DataGridColumn> にバインドできます。

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

結論

この回避策を使用すると、データ バインディングを使用して、XAML で WPF DataGrid の変更可能な列を直接定義できます。特に可変数の列を扱う場合、便利で保守が容易なアプローチを提供します。

以上がXAML データ バインディングを使用して WPF DataGrid を可変数の列にバインドする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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