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:
class Data { public IList<ColumnDescription> ColumnDescriptions { get; set; } public string[][] Rows { get; set; } }
Untuk memaparkan data ini dalam DataGrid, lajur mesti dijana secara dinamik:
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)) }); }
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:
public class DataGridColumnsBehavior { public static readonly DependencyProperty BindableColumnsProperty = DependencyProperty.RegisterAttached("BindableColumns", typeof(ObservableCollection<DataGridTextColumn>), typeof(DataGridColumnsBehavior), new UIPropertyMetadata(null, BindableColumnsPropertyChanged)); // ... }
Anda kemudiannya boleh mengikat sifat BindableColumns ke objek ObservableCollection of DataGridColumn dalam XAML:
<DataGrid Name="dataGrid"> local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" AutoGenerateColumns="False" ... />
Cara menggunakan
Untuk menggunakan kelakuan BindableColumns, tentukan ObservableCollection objek DataGridColumn:
public ObservableCollection<DataGridTextColumn> ColumnCollection { get; private set; }
Dan kemas kini lajur secara dinamik melalui acara CollectionChanged:
columns.CollectionChanged += (sender, e2) => { // ... };
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!