10

mi diverto con il nuovo modello di app universale per Windows Store che potrebbe essere utilizzato per Windows 8.1 e Windows Phone 8.1 e mi chiedevo come formattare le stringhe nel codice XAML.Come formattare una data in un'app di Windows Store Universal (W8.1 + WP8.1)?

quello che ho provato (XAML):

<TextBlock Text="{Binding TestItem.CurrentDate, StringFormat={}{0:MM/dd/yyyy}}" /> 

Il problema è che StringFormat non è disponibile in Windows.UI.Xaml.Controls.TextBox.

Microsoft ha creato un sample project che riguarda esclusivamente le date di formattazione. Ma l'approccio usato lì è basato sul (brutto) codice dietro.

Quindi, ecco la mia domanda:

  • Perché StringFormat non è disponibile in Windows Store universale Apps?
  • Come posso formattare le stringhe usando solo il codice XAML?


EDIT: ho deciso di andare con la soluzione convertitore, per quelli di interesse qui è il codice:

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(); 
    } 
} 

Sono felice per ogni singola consigli su come migliorare la codice sopra, sentiti libero di commentare.

Grazie a voi Mikael Dúi Bolinder e Martin Suchan per il vostro suggerimento/risposta.

+1

Forse dovresti creare un convertitore? –

+0

Sì, sarebbe un'opzione ma non voglio farlo prima di ora che non c'è altro (migliore) modo di farlo. – Joel

+1

Come hai collegato il convertitore al markup? Tutte le mie combinazioni di STaticResource, Relative ... ecc. Falliscono tutte. Nota a margine: Trovo ridicolo che StringFormat manchi. È 2014 e .NET 4.5. Di tutte le riunioni che avevano su Windows Phone 8.1, nessuno ha richiamato la formattazione delle date sui controlli DataBound? –

risposta

7

DataBinding in tipi di progetto di Windows Runtime non supporta proprietà StringFormat, le opzioni che si hanno sono:

  • Utilizza la data già formattata come un get-solo proprietà nella ViewModel.
  • Usa Converter - si può anche creare StringFormatConverter dove si può passare il formato DateTime come ConverterParameter. Here's a solution come tale StringFormatConverter potrebbe funzionare.
Problemi correlati