Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengikat Nombor Dinamik Lajur ke WPF DataGrid?

Bagaimana untuk Mengikat Nombor Dinamik Lajur ke WPF DataGrid?

Susan Sarandon
Lepaskan: 2025-01-22 08:33:13
asal
152 orang telah melayarinya

How to Bind a Dynamic Number of Columns to a WPF DataGrid?

WPF DataGrid: Ikat bilangan lajur secara dinamik

Soalan:

Aplikasi WPF menjana set data dengan bilangan lajur yang berubah-ubah, perihalan lajur yang diperlukan disertakan dalam output. Kod untuk mencipta lajur secara pemrograman melibatkan pengikatan menggunakan pemformatan rentetan, contohnya:

<code class="language-csharp">dataGrid.Columns.Add(new DataGridTextColumn
{
    Header = data.ColumnDescriptions[i].Name,
    Binding = new Binding(string.Format("[{0}]", i))
});</code>
Salin selepas log masuk

Matlamatnya adalah untuk menggantikan kod ini dengan pengikatan data dalam fail XAML.

Penyelesaian:

Harta Lajur DataGrid ialah baca sahaja dan tidak boleh terikat secara langsung. Walau bagaimanapun, sifat tambahan yang dipanggil BindableColumns boleh digunakan sebagai penyelesaian:

<code class="language-csharp">public class DataGridColumnsBehavior
{
    // 附加属性,绑定到DataGridColumn集合
    public static readonly DependencyProperty BindableColumnsProperty =
        DependencyProperty.RegisterAttached("BindableColumns",
                                            typeof(ObservableCollection<DataGridColumn>),
                                            typeof(DataGridColumnsBehavior),
                                            new UIPropertyMetadata(null, BindableColumnsPropertyChanged));
}</code>
Salin selepas log masuk

Dalam fail XAML, ikat sifat BindableColumns ke koleksi lajur:

<code class="language-xml"><DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid></code>
Salin selepas log masuk
<code class="language-csharp">public ObservableCollection<DataGridColumn> ColumnCollection
{
    get;
    private set;
}</code>
Salin selepas log masuk

Kaedah BindableColumnsPropertyChanged mengemas kini sifat Columns apabila koleksi terikat berubah:

<code class="language-csharp">private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
    DataGrid dataGrid = source as DataGrid; // 获取DataGrid实例

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

    ObservableCollection<DataGridColumn> columns = e.NewValue as ObservableCollection<DataGridColumn>;
    if (columns == null)
    {
        return;
    }

    // 添加新列
    foreach (DataGridColumn column in columns)
    {
        dataGrid.Columns.Add(column);
    }

    // 处理集合更改
    columns.CollectionChanged += (sender, e2) =>
    {
        // ...  处理集合变化,例如重新绑定列
        dataGrid.Columns.Clear();
        foreach (DataGridColumn column in columns)
        {
            dataGrid.Columns.Add(column);
        }
    };
}</code>
Salin selepas log masuk

Kaedah ini mendengar perubahan koleksi (tambah, padam, ganti) dan mengemas kini sifat Lajur dengan sewajarnya. Perlu diingat bahawa dalam kaedah BindableColumnsPropertyChanged, pemerolehan tika dataGrid ditambah dan peristiwa perubahan koleksi diproses dengan lebih lengkap untuk memastikan kemas kini lajur disegerakkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Nombor Dinamik Lajur ke WPF DataGrid?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan