Ich habe 3 Datagrids, die denselben Datentyp haben. Ich möchte die Spaltenbindung einmal konfigurieren und die 3 Datagrids die Ressource freigeben.
z.B.
%Vor%Gibt es eine Möglichkeit, die ItemsSource für jedes DataGrid festzulegen, und dann eine Datatemplate oder ein ControlTemplate zu verwenden, um die Spalten zu erhalten?
Ja ... zwei Möglichkeiten. Man kann einfach einen Stil für DataGrid
hinzufügen, der die Spalten so einstellt ...
Das funktioniert, stellt aber ein Problem dar, wenn Sie es auf mehrere Raster anwenden, die möglicherweise bereits einen Stil verwenden.
In diesem Fall funktioniert der andere, flexiblere Weg besser. Dies erfordert jedoch das Erstellen einer XAML-freundlichen Klasse, die ein ObservableCollection<DataGridColumn>
repräsentiert (obwohl Sie technisch nur Spalten angegeben haben, bin ich gerne selbst fertig, also würde ich auch eins für die Zeilen machen) Fügen Sie sie dann an einer Stelle hinzu, auf die Sie verweisen können die XAML-Namespaces. (Ich nenne mein xmlns:dge
für 'DataGridEnhancements') Sie verwenden es dann wie folgt:
Im Code somwhere (ich würde es App-weit zugänglich machen) ...
%Vor%Dann in den Ressourcen ...
%Vor%Und schließlich im XAML ...
%Vor%HTH,
Markieren
BEARBEITEN:
Da Sie die DataGrid.Columns
-Eigenschaft nicht festlegen können, müssen Sie verbessern Ihre DataGridView
(wie in den Kommentaren erwähnt). Hier ist der Code für ein EnhancedDataGrid
:
Jetzt können Sie die Spalten mit der SetColumns-Abhängigkeitseigenschaft festlegen, die in Ihrem CustomControl erstellt wurde:
%Vor% Diese Antwort basiert auf der Lösung von MarquelV. In seiner Antwort (und in den Kommentaren) erwähnt er ein benutzerdefiniertes Steuerelement mit dem Namen EnhancedDataGrid
, wobei er Logik für setzen die Eigenschaft DataGrid.Columns
bereitstellt. Hier ist der Code für ein EnhancedDataGrid
:
Jetzt können Sie die Spalten mit der SetColumns-Abhängigkeitseigenschaft festlegen, die in Ihrem CustomControl erstellt wurde:
%Vor%Tags und Links wpf