WPFでのデータを使用した文字列の指定はViewModel側で文字列まで加工する必要があるかと思っていたけれども、実はXAML側で指定できたのでやりかたメモ
基本
以下のように StringFormat
を使用します。
基本
<TextBlock Text="{Binding Value, StringFormat={}{0} 円}"/>
<TextBlock Text="{Binding Value, StringFormat=商品A {0} 円}"/>
バインディングするデータが最初に来る場合は、頭に {}
を付ける必要があります。(属性値のBindingなどではなく文字として中括弧がつかいたいため)
書式指定
StringFormat内では書式指定ができます。(例:数字の0埋めなど)
3桁の0埋め
<TextBlock Text="{Binding Value, StringFormat=商品A {0:D3} 円}"/>
指定方法は以下などを参照してください
- 複合書式指定
- 標準の数値書式指定文字列
- カスタム数値書式指定文字列
- 標準の日時書式指定文字列
- カスタム日時書式指定文字列
- 標準の時間間隔書式指定文字列
- カスタム時間間隔書式指定文字列
- 列挙型書式指定文字列
マルチバインディング
一つの文字列に複数のデータをバインディングしたい場合は以下のようにします。
MultiBindingの指定でもデータが最初に来る場合は頭に {}
をつける必要があります。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="First {0} : Second {1}">
<Binding Path="FirstValue"/>
<Binding Path="SecondValue"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
string以外の型から文字列を取得したい場合はConverterを使いますが、
Converterも以下のようにして使用できます
<Binding Path="Value" Converter="{StaticResource SomethingConverter}"/>
MultiBinding クラス (System.Windows.Data)
Binding クラス (System.Windows.Data)
参考
BindingBase.StringFormat プロパティ (System.Windows.Data)
.NET Framework における型の書式設定