Ich habe verschiedene Möglichkeiten ausprobiert, um das Format einer Zelle in einem WPF DataGrid (das mit .NET 4 bereitgestellt wird) aus dem Weg zu räumen:
Ich werde meine Versuche beschreiben, da dies jemand anderen helfen könnte, und ich hoffe, dass jemand mir Rat geben kann, um diese Lösungen zu verbessern. Beachten Sie, dass ich ziemlich neu in WPF bin ...
Das erwartete Verhalten besteht darin, dass die Zellenzeichenfolge für die Anzeige in einem bestimmten Format wie "1,234,567" formatiert ist, aber beim Bearbeiten der Zelle als "1234567" (Standardformatierung) formatiert sein sollte. Als ich versuchte, einen Datenkonverter zu verwenden, fand ich keine Möglichkeit, die Standardformatierung bei der Bearbeitung zu verwenden. Daher konzentrierte ich meine Energie auf Stile und Vorlagen.
Bei einem Stil sieht die Definition der DataGridTextColumn wie folgt aus:
%Vor%Das Verhalten ist genau das, was erwartet wird. Allerdings kann ich diesen Stil nicht ausklammern und mehrfach verwenden, wegen der Bindung. Um das Faktorisierungsproblem zu lösen, habe ich eine DataGridTemplateColumn und Datenvorlagen verwendet. Hier ist meine DataGridTemplateColumn-Definition:
%Vor%Und die ControlTemplate-Definition:
%Vor%Die Verwendung von Datenvorlagen löst das anfängliche Problem der Formatierung von DataGrid-Zellen, aber die Verwendung einer Steuerelementvorlage führt zu ergonomischen und visuellen Problemen. Zum Beispiel die Doppel-Tab-Navigation, die durch die Kontrollschablone verursacht wird (an vielen anderen Stellen diskutiert), und das Aussehen des Bearbeitungs-Textfelds (das ich mit Randstärke, Füllung und den anderen Eigenschaftseinstellungen zu korrigieren versuche).
Spezifische Fragen zu diesem Thema sind:
Erstellen Sie Ihre eigene benutzerdefinierte DataGridTextColumn und erstellen Sie Bindungen, die dem Element und dem EditingElement zugewiesen werden (einer davon mit einem Konverter, von denen einer ohne).
Der Konverter formatiert die Zeichenfolge so, dass sie mit Kommata wie eine Dezimalzahl aussieht.
%Vor%Ich habe nicht verstanden, wie die von Ihnen gepostete Formatierungszeichenfolge funktioniert, also habe ich eine einfache geschrieben. Wenn Sie mehr Dezimalstellen haben wollen, sortieren Sie sie einfach im Konverter aus.
Sie müssen jetzt nur einen Verweis auf den Namespace in Ihrer XAML erstellen und dann eine Spalte im DataGrid erstellen.
Dann sollte alles gut sein
u_u
Tags und Links wpf string-formatting datagrid datagridtextcolumn datagridtemplatecolumn