Windows Phone 8使用格式绑定到字符串资源

我的本地化资源字符串名为TextResource ,其值为: Text: {0} 。 其中{0}是String.Format的占位符。

我的用户控件有一个名为Count的DependecyProperty。

我想将Count绑定到文本框的文本,但也应用本地化的字符串。 这样文本块的内容就是Text: 5 (假设Count的值是5)

我设法弄清楚如何绑定本地化的字符串

   

或财产价值

   

但不是两个同时。

我怎么能在XAML中做到这一点?

PS:一种选择是添加两个文本块而不是一个,但我不确定这是否是一个好习惯。

你有三个选择。

第一个选项 :修改视图模型以显示格式化的字符串并绑定到该字符串。

 public string CountFormatted { get { return String.Format(AppResources.TextResource, Count); } } 
  

第二个选项 :制作转换器MyCountConverter

 public class MyCountConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value == null) return value; return String.Format(culture, AppResources.TextResource, value); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 
    ...  

第三个选项 :使用bind-able转换器参数,以便您可以创建一个通用的StringFormat转换器,您可以在其中实际绑定转换器参数。 Windows手机中不支持此function,但仍然可以使用。 查看此链接,了解如何完成此操作。

但是,除非您使用资源来支持多种语言,否则将格式作为普通字符串传递给转换器要容易得多。

  

在这种情况下,您必须创建一个使用参数的StringFormatConverter转换器。

编辑:

关于第三个选项,您可以使用上面链接中的IMultiValueConverter来实现您想要的效果。 您可以添加以下转换器:

 public class StringFormatConverter: IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var param = values[0].ToString(); var format = values[1].ToString(); return String.Format(culture, format, param); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 
   

我不知道是否值得付出努力。