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

Bagaimana untuk Mengikat Lajur Secara Dinamik ke DataGrid WPF menggunakan XAML?

Patricia Arquette
Patricia Arquetteasal
2025-01-22 08:16:14163semak imbas

How to Dynamically Bind Columns to a WPF DataGrid using XAML?

Ikatan dinamik lajur dalam WPF DataGrid

Harta Columns bagi WPF DataGrid ialah baca sahaja, yang mewujudkan cabaran apabila cuba mengikat data secara pemrograman dengan bilangan lajur yang berubah-ubah.

Pertimbangkan senario berikut:

<code class="language-csharp">class Data
{
    public IList<ColumnDescription> ColumnDescriptions { get; set; }
    public string[][] Rows { get; set; }
}</code>

Untuk memaparkan data ini dalam DataGrid, lajur mesti dijana secara dinamik:

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

Adakah mungkin untuk menggantikan kod ini dengan pengikatan data dalam fail XAML?

Penyelesaian: BindableColumns melampirkan atribut

Walaupun sifat Lajur masih dibaca sahaja, sifat tambahan yang dipanggil BindableColumns boleh dibuat:

<code class="language-csharp">public class DataGridColumnsBehavior
{
    public static readonly DependencyProperty BindableColumnsProperty =
        DependencyProperty.RegisterAttached("BindableColumns",
                                            typeof(ObservableCollection<DataGridTextColumn>),
                                            typeof(DataGridColumnsBehavior),
                                            new UIPropertyMetadata(null, BindableColumnsPropertyChanged));
    // ...
}</code>

Anda kemudiannya boleh mengikat sifat BindableColumns ke objek ObservableCollection of DataGridColumn dalam XAML:

<code class="language-xml"><DataGrid Name="dataGrid">
    local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}"
    AutoGenerateColumns="False"
    ... /></code>

Cara menggunakan

Untuk menggunakan kelakuan BindableColumns, tentukan ObservableCollection objek DataGridColumn:

<code class="language-csharp">public ObservableCollection<DataGridTextColumn> ColumnCollection
{
    get;
    private set;
}</code>

Dan kemas kini lajur secara dinamik melalui acara CollectionChanged:

<code class="language-csharp">columns.CollectionChanged += (sender, e2) =>
{
    // ...
};</code>

Penyelesaian ini membenarkan pengikatan data lajur dalam DataGrid tanpa mengubah suai sifat Lajur baca sahaja.

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

Kenyataan:
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