2014-07-26 13 views
6

Tôi đang cố định dạng string của mình để có dấu phẩy mỗi 3 vị trí và một số thập phân nếu nó không phải là số nguyên. Tôi đã kiểm tra khoảng 20 ví dụ và đây là gần nhất tôi đã đến:StringFormat in XAML

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

Nhưng tôi gặp lỗi The property 'StringFormat' was not found in type 'Binding'..

Mọi ý tưởng có gì sai ở đây? Windows Phone 8.1 có vẻ khác với WPF, bởi vì tất cả các tài nguyên WPF đều nói rằng đây là cách nó được thực hiện.

(The string được cập nhật liên tục, vì vậy tôi cần mã được trong XAML. Tôi cũng cần nó để vẫn binded. Trừ khi tất nhiên tôi không thể có bánh của tôi và ăn nó quá.)

+0

có thể trùng lặp của [Windows Phone 8.1 XAML StringFormat] (http://stackoverflow.com/questions/24127262/windows-phone-8- 1- xaml-stringformat) – Romasz

Trả lời

10

Dường tương tự như Binding trong WinRT, Binding trong Windows Phone Ứng dụng phổ quát không có thuộc tính StringFormat. Một cách tốt để làm việc xung quanh hạn chế này được sử dụng Converter như được giải thích trong this blog post,

Để tóm tắt bài viết, bạn có thể tạo một IValueConverter implmentation chấp nhận định dạng chuỗi như tham số:

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

Tạo một tài nguyên của trên chuyển đổi trong XAML của bạn, sau đó bạn có thể sử dụng nó như thế này ví dụ:

<TextBlock x:Name="countTextBlock" 
      Text="{Binding Count, 
          Converter={StaticResource StringFormatConverter}, 
          ConverterParameter='{}{0:n}'}" /> 
Các vấn đề liên quan