WPF Datagrid binden benutzerdefinierte Spaltenüberschriften
Ich versuche herauszufinden, wie zu binden eine WPF-DataGrid-Spalte-header und die wichtigsten Daten in einer Datenquelle mit einer MVVM-Muster. Das Ergebnis ich bin auf der Suche nach würde so Aussehen:
(Quelle: vallelunga.com)
Habe ich erfolgreich gestalteten die überschriften hier, aber ich bin mir nicht sicher, wie das binden der Werte in den Headern. Insbesondere die IsChecked-Eigenschaft der check-box, den ausgewählten index der combo-box und den Wert der text-box.
Ich war vorher über eine einfache DataTable zu bevölkern, die Haupt-raster-Daten, aber ich bin gehen zu müssen, etwas komplexeres zu halten, um sowohl die raster-Daten und die Werte für jede Spalte. Oder vielleicht kann ich speichern Sie Sie als separate Einheiten vollständig.
So, hat jemand eine Idee, wie ich vielleicht ziehen Sie diese verbindlich? Eine Einschränkung ist, dass müssen die Spalten werden automatisch generiert, weil ich keine Ahnung habe, was werden Sie erst zur Laufzeit. Die Anwendung lädt einfach das Formular eine Excel-Tabelle, und es kann eine beliebige Anzahl von Spalten vorhanden.
Dank,
Brian
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was ich am Ende tun, um mit dem MVVM-Muster:
Ich habe zwei Sätze von Daten für die Bindung auf meine anzeigen Modell: eine für die eigentlichen raster-Daten und eine für die Spalte Header. Gegenwärtig werden diese ausgesetzt sind, als zwei Eigenschaften:
Der trick arbeitet mit zwei unterschiedliche Sätze von Daten ist im raster. Ich habe Unterklassen der DataGrid-und angesichts der grid ist eine zusätzliche Datenquelle genannt ColumnSource, als Abhängigkeitseigenschaft. Dies ist, was gebunden ist an die ColumnData auf meinem view-Modell. Ich habe dann den header von jedem automatisch generierte Spalte an der entsprechend indizierten Daten in der ColumnSource Datenquelle. Der code ist wie folgt:
Kann ich jetzt normal Datenbindung in die Vorlagen-Kopfzeile meiner Spalten, die alle binden, gegen die Daten in der ColumnData Eigenschaft meiner Ansicht Modell.
UPDATE: ich wurde gebeten, zu zeigen, die XAML-Code für mein raster. Es ist wirklich grundlegende, aber hier ist es:
Und hier ist die ImporterColumnHeaderStyle:
Ich bin definitiv ein WPF /MVVM /databinding-noob, aber haben hart gearbeitet, über diese Dinge in letzter Zeit. Ich weiß nicht, was Sie haben verdrahtet, so weit, aber erste Sie wollen DataContext für Ihre Ansicht. Da bist du mit MVVM, ich nehme an, Sie haben ein ViewModel, so sollte der DataContext für Ihre Ansicht.
d.h. wenn Sie Ihre Anzeigen erstellen Sie /Ihre eigenen ViewModel, könnte es wie folgt Aussehen:
Können Sie ganz einfach databind Ihre CheckBox, ComboBox und TextBox-Eigenschaften in der ViewModel. Die ich gefunden habe, ist der einfachste Weg, um Ihre ViewModel Erben von einem Basis-viewmodel-Klasse, wie die eine, Josh Smith schrieb. Dies wird Ihnen eine Methode, um intern anzurufen, wenn Sie wollen, dass die ViewModel zu Benachrichtigen, die GUI-änderungen in den Werten.
Vorausgesetzt, Sie haben Eigenschaften wie ImportColumn, LastName, und LastNameText (alle C# - Eigenschaften, nicht Felder, dass call OnPropertyChanged entsprechend), dann ist dein XAML-Code würde wie folgt Aussehen:
Ich hoffe, das hilft Ihnen heraus. Wenn nicht, bitte Kommentar, und ich werde versuchen so gut wie ich kann, um zu versuchen, andere Dinge aus.
Tun wir etwas ähnliches in unserer app.
Was ich gemacht habe, ist abgeleitet meine eigenen Spalte Typ (DataGridSearchableBooleanColumn), dann Ersetze ich die DataGridColumnHeader Vorlage habe ich zwei content Moderatoren in es. der erste, den ich binden, um den Inhalt (der gleiche wie der Standard-Vorlage) die zweite, die ich binden an die Säule. Ich benutze eine Daten-Vorlage für die Spalte (ich habe ein paar von Ihnen für unterschiedliche such-Arten (text, combo, boolean). dann füge ich die zusätzlichen Eigenschaften der Spalte, so kann ich an Sie gebunden. Sehen Sie, ob dieser code macht Sinn.