私は現在、TextBlock
以下の名前のプロパティの値をバインドするために以下を使用していますName
:
<TextBlock Text="{Binding Name}" />
ここで、同じという名前の別のプロパティをバインドしたいと思います。ID
TextBlock
2つ以上の値を同じものにバインドすることは可能TextBlock
ですか?単純な連結で実行できますName + ID
か?そうでない場合は、他にどのようにアプローチできますか?
私は現在、TextBlock
以下の名前のプロパティの値をバインドするために以下を使用していますName
:
<TextBlock Text="{Binding Name}" />
ここで、同じという名前の別のプロパティをバインドしたいと思います。ID
TextBlock
2つ以上の値を同じものにバインドすることは可能TextBlock
ですか?単純な連結で実行できますName + ID
か?そうでない場合は、他にどのようにアプローチできますか?
MultiBinding
プロパティと組み合わせて使用できStringFormat
ます。使用法は次のようになります。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Name
の値Foo
とID
の値を指定すると、 TextBlock1
の出力は になりますFoo + 1
。
注:これは、.NET 3.5 SP1 および 3.0 SP2 以降でのみサポートされます。
これがかなり遅れていることはわかっていますが、これを行う別の方法を追加すると思いました。
「 Run 」を使用して Text プロパティを設定できるという事実を利用できるため、それぞれに 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>
これにより、コーディングを行わなくてもテキストが表示されます (これはすべて Textblocks が行うことです)。ただし、それらが正しく見えるように、それらに小さなマージンを置くことができます。
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}}" />