如何将多个值绑定到单个WPF TextBlock?

时间:2010-03-31 12:32:46

标签: wpf data-binding binding textblock multibinding

我目前正在使用下面的TextBlock来绑定名为Name的属性的值:

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

现在,我想将另一个名为ID属性绑定到同一个TextBlock

是否可以将两个或多个值绑定到同一个TextBlock?是否可以通过简单的连接来完成,例如Name + ID,如果没有,还可以如何处理它?<​​/ p>

4 个答案:

答案 0 :(得分:380)

您可以将MultiBindingStringFormat属性结合使用。用法类似于以下内容:

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

如果名称为Foo,并且您在TextBlock中输出的1 ID值将为Foo + 1

Note: 仅在.NET 3.5 SP1和3.0 SP2或更高版本中支持此功能。

答案 1 :(得分:115)

我知道这有点晚了,但我想我还会添加另一种方法。

您可以利用可以使用“Run s”设置Text属性这一事实,因此您可以使用Run为每个绑定设置多个绑定。如果您无法访问MultiBinding(我在开发Windows Phone时没有找到),这很有用。

<TextBlock>
  <Run Text="Name = "/>
  <Run Text="{Binding Name}"/>
  <Run Text=", Id ="/>
  <Run Text="{Binding Id}"/>
</TextBlock>

答案 2 :(得分:21)

如果这些只是文本块(因此单向绑定),并且您只想连接值,只需绑定两个文本块并将它们放在水平堆栈面板中。

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

这将显示文本(所有文本块都可以),而无需再进行任何编码。你可以在它们上留一小部分让它们看起来正确。

答案 3 :(得分:10)

使用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}}" />