文本块:文本绑定和字符串格式化

4

是否可以绑定TextStringFormat呢?

<TextBlock Text="{Binding Path=Price, StringFormat={Binding Path=DecimalPoints}}" />

DecimalPointsF0 变化到 F15。不幸的是,上面的代码无法编译。


1
不,但你可能可以使用转换器来实现这个。 - jamesSampica
3个回答

7
我认为您最好使用一个转换器。然后,您的绑定将如下所示:
<TextBlock.Text>
   <MultiBinding Converter="{StaticResource StringFormatConverter }">
      <Binding Path="Price"/>
      <Binding Path="DecimalPoints"/>
   </MultiBinding>
</TextBlock.Text>

然后是一个快速转换器(你可以让它更好看,但这是大致的想法)。
    public class StringFormatConverter : IMultiValueConverter
    {
      #region IMultiValueConverter Members

      public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
          double number = (double)values[0];
          string format = "f" + ((int)values[1]).ToString();
          return number.ToString(format);
      }

      public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
      {
        throw new NotImplementedException();
      }

      #endregion
    }

运行完美,谢谢。你说的“让它更好看”是什么意思? - as74
嗯,例如我假设传递的值是double和int类型。此外,我假设传递了两个值(而不是只有一个)。你可以通过先检查参数来使方法更加防错。 - Liz
@Liz,请问你能帮我检查一下这个问题吗:http://stackoverflow.com/questions/40134370/how-to-add-textblock-text-value-from-database-object-value - Roxy'Pro

5

如@Sheridan所述,在这种情况下,Binding将无法工作。但是您可以创建一个带有静态字符串的类,并在XAML中引用它们。语法如下:

<x:Static Member="prefix : typeName . staticMemberName" .../>

以下是一个示例:
XAML
xmlns:local="clr-namespace:YourNameSpace"
xmlns:sys="clr-namespace:System;assembly=mscorlib"

<Grid>
    <TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat={x:Static Member=local:StringFormats.DateFormat}}" 
               HorizontalAlignment="Right" />

    <TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat={x:Static Member=local:StringFormats.Time}}" />
</Grid>

代码后台

public class StringFormats 
{
    public static string DateFormat = "Date: {0:dddd}";

    public static string Time = "Time: {0:HH:mm}";
}   

更多信息,请参见:

MSDN上的x:Static标记扩展


3

不,你不能……原因是只能绑定到DependencyObjectDependencyProperty,而Binding类的StringFormat属性只是一个string


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接