240

我目前正在使用TextBlock以下内容绑定名为的属性的值Name

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

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

是否可以将两个或多个值绑定到同一个TextBlock?可以通过简单的连接来完成,例如Name + ID,如果不能,还有什么方法可以解决?

4

4 回答 4

490

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

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

给出和的值Name,您在 TextBlock 中的输出将是。FooID1Foo + 1

注意:这仅在 .NET 3.5 SP1 和 3.0 SP2 或更高版本中受支持。

于 2010-03-31T12:42:52.340 回答
151

我知道这有点晚了,但我想我会添加另一种方式来做到这一点。

您可以利用 Text 属性可以使用“ Run s”设置这一事实,因此您可以使用 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

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

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

这将显示文本(这是所有 Textblocks 所做的),而无需进行更多编码。不过,您可能会在它们上留一点边距以使它们看起来正确。

于 2010-03-31T13:54:58.217 回答
13

使用值转换器

[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 回答