XAML中的StringFormat

时间:2014-07-26 00:44:27

标签: xaml data-binding string-formatting windows-phone-8.1

我正在尝试将string格式化为每3个位置使用逗号,如果不是整数,则为小数。我检查了大约20个例子,这是我最接近的例子:

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

但我收到The property 'StringFormat' was not found in type 'Binding'.错误。

这里有什么问题吗? Windows Phone 8.1似乎与WPF不同,因为所有WPF资源都说它就是这样做的。

string不断更新,所以我需要代码在XAML。我还需要它保持绑定。除非我当然不能吃蛋糕也吃掉它。 )

1 个答案:

答案 0 :(得分:10)

似乎与WinRT中的Binding类似,Windows Phone Universal Apps中的Binding没有StringFormat属性。解决此限制的一种可能方法是使用this blog post中所述的Converter

要总结帖子,您可以创建一个接受字符串格式作为参数的IValueConverter implmentation:

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

在您的XAML中创建上述转换器的资源,然后您可以像这样使用它,例如:

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