2014-07-26 12 views
6

Próbuję sformatować mój string, aby mieć przecinki co 3 miejsca i dziesiętnie, jeśli nie jest to liczba całkowita. Sprawdziłem około 20 przykładów, a jest to najbliżej doszedłem:StringFormat w XAML

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

Ale pojawia się błąd The property 'StringFormat' was not found in type 'Binding'..

Jakieś pomysły, co tu jest nie tak? Wygląda na to, że Windows Phone 8.1 różni się od WPF, ponieważ wszystkie zasoby WPF mówią, że tak to się dzieje.

(The string jest stale aktualizowana, więc muszę kodu być w XAML. Muszę również to, aby pozostać zbindowanych. O ile oczywiście nie mogę mieć moje ciastko i je zjeść.)

+0

możliwe duplikat [Windows Phone 8.1 XAML StringFormat] (http://stackoverflow.com/questions/24127262/windows-phone-8- 1- xaml-stringformat) – Romasz

Odpowiedz

10

Wydaje to, podobne do Binding w WinRT, Binding w Windows Phone Universal Apps nie ma właściwości StringFormat. Jednym z możliwych sposobów obejścia tego ograniczenia jest użycie Converter jak wyjaśniono w this blog post,

Podsumowując stanowisko, można utworzyć IValueConverter implmentation że akceptują format string jako parametr:

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

Utwórz zasób powyżej konwerter w XAML, następnie można go używać jak to na przykład:

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