65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows RT 的 StringFormat 替代方案

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2013年4月17日

CPOL
viewsIcon

10181

一种在 Windows Runtime 中使用 XAML 格式化绑定数据的简单有效方法

背景 

在 .NET (3.5+) 和 Silverlight 中,可以很容易地使用 StringFormat 格式化绑定到控件的数据。StringFormat 应用标准的或自定义的 .NET 格式化字符串。这里,属性 ReleaseDate 被绑定到 TextBlock 的 Text 属性。

<TextBlock Text="{Binding ReleaseDate, StringFormat=\{0:D\}}" /> 

不幸的是,Windows Runtime 缺少 StringFormat 功能。

解决方案 

解决这个问题很简单。它需要一个可以添加到你的工具包的新类:

    public class StringFormat : IValueConverter
    {
        /// <summary>
        /// Converts the specified value.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="targetType">Type of the target.</param>
        /// <param name="parameter">The parameter.</param>
        /// <param name="language">The language.</param>
        /// <returns>The formatted value.</returns>
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            return string.Format(parameter as string, value);
        }  

        /// <summary>
        /// Converts the value back.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="targetType">Type of the target.</param>
        /// <param name="parameter">The parameter.</param>
        /// <param name="language">The language.</param>
        /// <returns>The original value.</returns>
        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            // This does not need to be implemented for simple one-way conversion.
            return null;
        }
    } 

现在你可以在 XAML 中引用这个类,并像这样使用它

 
    <Page.Resources>
        <local:StringFormat x:Name="StringFormat"/>
    </Page.Resources>

...

    <TextBlock Text="{Binding ReleaseDate, Converter={StaticResource StringFormat}, ConverterParameter=\{0:D\}}" />

值得关注的点  

通过创建一个实现 IValueConverter 的类,任何类型都可以绑定到 XAML 控件而无需任何代码隐藏。

© . All rights reserved.