Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengikat Lajur Secara Dinamik ke DataGrid WPF menggunakan 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!