4

バインドも可能TextですStringFormatか?

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

DecimalPointsは から に常に変化しF0ていF15ます。残念ながら、上記のコードはコンパイルされません。

4

3 に答える 3

6

あなたの最善の策は間違いなくコンバーターだと思います。次に、バインディングは次のようになります。

<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
    }
于 2013-08-29T18:51:50.660 に答える
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>

Code behind

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

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

詳細については、以下を参照してください。

x:MSDN の静的マークアップ拡張機能

于 2013-08-29T16:17:39.910 に答える