Wie formatiere ich ein Datum in einer Windows Store Universal App (W8.1 + WP8.1)?
-
21-12-2019 - |
Frage
Ich habe mit der neuen Windows Store Universal App-Vorlage herumgespielt, die für Windows 8.1 und Windows Phone 8.1 verwendet werden kann, und habe mich gefragt, wie man Zeichenfolgen in XAML-Code formatiert.
Was ich versucht habe (XAML):
<TextBlock Text="{Binding TestItem.CurrentDate, StringFormat={}{0:MM/dd/yyyy}}" />
Das Problem ist, dass StringFormat
ist nicht verfügbar in Windows.UI.Xaml.Controls.TextBox
.
Microsoft hat eine erstellt Beispielprojekt Dabei geht es um die Formatierung von Datumsangaben.Aber der dort verwendete Ansatz basiert auf (hässlichem) Code dahinter.
Also, hier ist meine Frage:
- Warum ist
StringFormat
nicht im Windows Store Universal Apps verfügbar? - Wie formatiere ich Zeichenfolgen nur mit XAML-Code?
BEARBEITEN:Ich habe mich für die Konverterlösung entschieden. Für diejenigen, die es interessiert, hier der Code:
public class DateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
return null;
if (!(value is DateTime))
return null;
var dateTime = (DateTime)value;
var dateTimeFormatter = new DateTimeFormatter(YearFormat.Full,
MonthFormat.Full,
DayFormat.Default,
DayOfWeekFormat.None,
HourFormat.None,
MinuteFormat.None,
SecondFormat.None,
new[] { "de-DE" },
"DE",
CalendarIdentifiers.Gregorian,
ClockIdentifiers.TwentyFourHour);
return dateTimeFormatter.Format(dateTime);
}
public object ConvertBack(object value, Type targetType, object parameter,
string language)
{
throw new NotImplementedException();
}
}
Ich freue mich über jeden einzelnen Tipp zur Verbesserung des obigen Codes. Kommentieren Sie ihn gerne.
Vielen Dank an Mikael Dúi Bolinder und Martin Suchan für Ihren Vorschlag/Ihre Antwort.
Lösung
DataBinding in Windows-Runtime-Projekttypen unterstützt die StringFormat-Eigenschaft nicht. Folgende Optionen stehen Ihnen zur Verfügung:
- Verwenden Sie das bereits formatierte Datum nur als Get-Only Eigenschaft in Ihrem ViewModel.
- Verwenden Konverter - Sie können sogar einen StringFormatConverter erstellen, in dem Sie das DateTime-Format als übergeben können KonverterParameter. Hier ist eine Lösung wie ein solcher StringFormatConverter funktionieren könnte.