Windows RT 的 StringFormat 替代方案





5.00/5 (2投票s)
一种在 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 控件而无需任何代码隐藏。