TextBlock:Text和StringFormat的绑定

as7*_*s74 4 wpf xaml binding textblock string-formatting

是否有可能结合TextStringFormat吗?

<TextBlock Text="{Binding Path=Price, StringFormat={Binding Path=DecimalPoints}}" />
Run Code Online (Sandbox Code Playgroud)

DecimalPoints不断变化F0F15.不幸的是,上面的代码无法编译.

Ana*_*aev 5

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

<x:Static Member="prefix : typeName . staticMemberName" .../>
Run Code Online (Sandbox Code Playgroud)

以下是一个例子:

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>
Run Code Online (Sandbox Code Playgroud)

Code behind

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

    public static string Time = "Time: {0:HH:mm}";
}   
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:

x:MSDN上的静态标记扩展


Liz*_*Liz 5

我认为你最好的选择绝对是转换器.然后你的绑定看起来像这样:

<TextBlock.Text>
   <MultiBinding Converter="{StaticResource StringFormatConverter }">
      <Binding Path="Price"/>
      <Binding Path="DecimalPoints"/>
   </MultiBinding>
</TextBlock.Text>
Run Code Online (Sandbox Code Playgroud)

然后一个快速转换器(你当然可以使它更好,但这是一般的想法).

    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
    }
Run Code Online (Sandbox Code Playgroud)