240

私は現在、TextBlock以下の名前のプロパティの値をバインドするために以下を使用していますName

<TextBlock Text="{Binding Name}" />

ここで、同じという名前の別のプロパティをバインドしたいと思います。IDTextBlock

2つ以上の値を同じものにバインドすることは可能TextBlockですか?単純な連結で実行できますName + IDか?そうでない場合は、他にどのようにアプローチできますか?

4

4 に答える 4

490

MultiBindingプロパティと組み合わせて使用​​できStringFormatます。使用法は次のようになります。

<TextBlock>
    <TextBlock.Text>    
        <MultiBinding StringFormat="{}{0} + {1}">
            <Binding Path="Name" />
            <Binding Path="ID" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Nameの値FooIDの値を指定すると、 TextBlock1の出力は になりますFoo + 1

注:これは、.NET 3.5 SP1 および 3.0 SP2 以降でのみサポートされます。

于 2010-03-31T12:42:52.340 に答える
151

これがかなり遅れていることはわかっていますが、これを行う別の方法を追加すると思いました。

「 Run 」を使用して Text プロパティを設定できるという事実を利用できるため、それぞれに Run を使用して複数のバインディングを設定できます。これは、MultiBinding にアクセスできない場合に便利です (Windows Phone 向けの開発時には見つかりませんでした)。

<TextBlock>
  <Run Text="Name = "/>
  <Run Text="{Binding Name}"/>
  <Run Text=", Id ="/>
  <Run Text="{Binding Id}"/>
</TextBlock>
于 2012-06-06T16:57:10.617 に答える
25

これらが単なるテキストブロック (したがって一方向バインディング) で、値を連結したいだけの場合は、2 つのテキストブロックをバインドして、水平スタックパネルに配置します。

    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding ID}"/>
    </StackPanel>

これにより、コーディングを行わなくてもテキストが表示されます (これはすべて Textblocks が行うことです)。ただし、それらが正しく見えるように、それらに小さなマージンを置くことができます。

于 2010-03-31T13:54:58.217 に答える
13

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}}" />
于 2010-03-31T12:35:09.533 に答える