回答:
プロパティMultiBinding
と組み合わせて使用できStringFormat
ます。使用法は次のようになります。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
寄付Name
の値Foo
とID
の値を1
、TextBlock内のあなたの出力は次のようになりFoo + 1
。
Note:
これは、.NET 3.5 SP1および3.0 SP2以降でのみサポートされています。
DataGrid
ソート動作などで使用すると、残念ながら機能しません。より適切な解決策は、バインドする適切な文字列形式を使用してモデルに読み取り専用プロパティを作成することです。言うまでもなく、これは少し冗長ではありますが、すばやくフォーマットするための適切な方法です。
XamlParseException: A 'Binding' cannot be set on the 'Path' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
私はこれが遅い方法であることを知っていますが、これを行う別の方法を追加したいと思いました。
Textプロパティは " Run s"を使用して設定できるため、それぞれにRunを使用して複数のバインディングを設定できます。これは、MultiBindingへのアクセス権がない場合に役立ちます(Windows Phone用に開発しているときに見つかりませんでした)。
<TextBlock>
<Run Text="Name = "/>
<Run Text="{Binding Name}"/>
<Run Text=", Id ="/>
<Run Text="{Binding Id}"/>
</TextBlock>
これらがテキストブロック(つまり、一方向バインディング)になるだけで、値を連結したいだけの場合は、2つのテキストブロックをバインドして、水平スタックパネルに配置します。
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding ID}"/>
</StackPanel>
これにより、コーディングを行わなくてもテキスト(すべてのTextblockが行う)が表示されます。ただし、見栄えを良くするために、それらに小さなマージンを設けることもできます。
ValueConverterを使用する
[ValueConversion(typeof(string), typeof(String))]
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return string.Format("{0}:{1}", (string) value, (string) parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
そしてマークアップで
<src:MyConverter x:Key="MyConverter"/>
。。。
<TextBlock Text="{Binding Name, Converter={StaticResource MyConverter Parameter=ID}}" />