So binden Sie Spalten in WPF DataGrid dynamisch
WPF DataGrid ist ein leistungsstarkes Steuerelement für die tabellarische Datenanzeige, seine Verarbeitungsmethode ist jedoch für Datenquellen mit variabler Spaltenanzahl nicht intuitiv. In diesem Artikel wird untersucht, wie diese Funktionalität mithilfe der Datenbindung in XAML erreicht wird.
Problembeschreibung
In einem vereinfachten Beispiel haben wir eine Klasse namens Data
, die eine ColumnDescription
Liste von Objekten (für Spaltenmetadaten) und ein 2D-Array Rows
(für die tatsächlichen Daten) enthält. Wir möchten diese Daten an ein WPF-DataGrid binden, müssen jedoch dynamisch Spalten basierend auf ColumnDescription
-Objekten erstellen.
Codelösung
Während der aktuelle Code eine for-Schleife verwendet, um Spalten programmgesteuert hinzuzufügen, können wir das gleiche Ergebnis deklarativ in XAML mithilfe von Datenbindung und angehängten Eigenschaften erzielen.
Zusätzliche Attribute:
Wir definieren eine zusätzliche Eigenschaft namens BindableColumns
, die einen ObservableCollection<DataGridColumn>
als Wert akzeptiert. Diese Eigenschaft ist dafür verantwortlich, die ObservableCollection
-Sammlung des DataGrids zu aktualisieren, wenn sich Columns
ändert.
<code class="language-csharp">public class DataGridColumnsBehavior { // 附加属性,用于将 DataGridColumns 集合绑定到目标元素上的属性 public static readonly DependencyProperty BindableColumnsProperty = DependencyProperty.RegisterAttached("BindableColumns", typeof(ObservableCollection<DataGridColumn>), typeof(DataGridColumnsBehavior), new UIPropertyMetadata(null, BindableColumnsPropertyChanged)); private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { // 为简洁起见,省略实现 } }</code>
XAML-Bindung:
Wir erstellen ein ObservableCollection<DataGridColumn>
und setzen seine angehängte BindableColumns
-Eigenschaft auf die Columns
-Eigenschaft des DataGrids.
<code class="language-xml"><DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid></code>
Ereignisabwicklung:
Im BindableColumnsPropertyChanged
-Handler der angehängten Eigenschaft löschen wir die vorhandenen Spalten, fügen neue Spalten aus ObservableCollection
hinzu und abonnieren seine CollectionChanged
-Ereignisse, um zukünftige Änderungen zu verarbeiten.
Dieser Ansatz ermöglicht uns die dynamische Verwaltung der DataGrid-Spalten basierend auf Datenänderungen und vermeidet die Notwendigkeit, Spaltencode manuell zu erstellen.
Das obige ist der detaillierte Inhalt vonWie binde ich Spalten dynamisch an ein WPF-DataGrid?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!