バインドも可能Text
ですStringFormat
か?
<TextBlock Text="{Binding Path=Price, StringFormat={Binding Path=DecimalPoints}}" />
DecimalPointsは から に常に変化しF0
ていF15
ます。残念ながら、上記のコードはコンパイルされません。
バインドも可能Text
ですStringFormat
か?
<TextBlock Text="{Binding Path=Price, StringFormat={Binding Path=DecimalPoints}}" />
DecimalPointsは から に常に変化しF0
ていF15
ます。残念ながら、上記のコードはコンパイルされません。
あなたの最善の策は間違いなくコンバーターだと思います。次に、バインディングは次のようになります。
<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
}
前述のように、この場合、@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}";
}
詳細については、以下を参照してください。