2014-07-26 14 views
6

Sto provando a formattare il mio string con virgole ogni 3 posizioni e un decimale se non è un numero intero. Ho controllato circa 20 esempi, e questo è il più vicino sono venuto:StringFormat in XAML

<TextBlock x:Name="countTextBlock" Text="{Binding Count, StringFormat={0:n}}" /> 

Ma io ottenere un errore di The property 'StringFormat' was not found in type 'Binding'..

Qualche idea cosa c'è di sbagliato qui? Windows Phone 8.1 sembra essere diverso da WPF, perché tutte le risorse WPF dicono che questo è il modo in cui è fatto.

(Il string viene aggiornata costantemente, quindi ho bisogno del codice di essere nel XAML. Ho anche bisogno di rimanere rilegato. A meno che, naturalmente, non posso avere la mia torta e la moglie ubriaca.)

+0

possibile duplicato di [Windows Phone 8.1 XAML StringFormat] (http://stackoverflow.com/questions/24127262/windows-phone-8- 1- XAML-StringFormat) – Romasz

risposta

10

Sembra questo, simile a Binding in WinRT, Binding in Windows Phone Universal Apps non ha la proprietà StringFormat. Un modo possibile aggirare questa limitazione sta usando Converter come spiegato in this blog post,

In sintesi il post, è possibile creare un IValueConverter implmentation che accetta formato stringa come parametro:

public sealed class StringFormatConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     if (value == null) 
      return null; 

     if (parameter == null) 
      return value; 

     return string.Format((string)parameter, value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

creare una risorsa di sopra convertitore nel vostro XAML, quindi è possibile utilizzarlo in questo modo, ad esempio:

<TextBlock x:Name="countTextBlock" 
      Text="{Binding Count, 
          Converter={StaticResource StringFormatConverter}, 
          ConverterParameter='{}{0:n}'}" />