2014-07-26 9 views
6

Ich versuche, meine string zu formatieren Kommas alle 3 Orte zu haben, und eine Dezimalzahl, wenn es nicht eine ganze Zahl ist. Ich habe rund 20 Beispiele geprüft, und das ist die nächste, die ich gekommen bin:String in XAML

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

Aber ich bekomme einen The property 'StringFormat' was not found in type 'Binding'. Fehler.

Irgendwelche Ideen, was hier falsch ist? Windows Phone 8.1 scheint sich von WPF zu unterscheiden, da alle WPF-Ressourcen angeben, dass dies so gemacht wird.

(Die string wird ständig aktualisiert, so muss ich den Code in der XAML sein. Ich brauche es auch binded bleiben. Es sei denn natürlich kann ich nicht meinen Kuchen haben und ihn auch zu essen.)

+0

möglich Duplikat [Windows Phone 8.1 XAML String] (http://stackoverflow.com/questions/24127262/windows-phone-8- 1- xaml-stringformat) – Romasz

Antwort

10

Es scheint, dass, ähnlich wie Binding in WinRT, Binding in Windows Phone Universal-Apps nicht über StringFormat Eigenschaft. Eine Möglichkeit, um diese Einschränkung zu arbeiten, wird mit Converter wie in this blog post erklärt,

den Posten Zusammenfassend kann man eine IValueConverter implmentation erstellen, die String-Format als Parameter akzeptieren:

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

Erstellen Sie eine Ressource von oben Konverter in XAML, dann können Sie es wie folgt verwenden, zB:

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