首页 文章

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

提问于
浏览
171

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

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

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

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

4 回答

  • 111

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

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

    给定 Foo 的Name值和 1 的ID值,您在TextBlock中输出的值为 Foo + 1 .

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

  • 363

    我知道这是一个迟到的方式,但我想我还会添加另一种方法 .

    您可以利用可以使用“Run s”设置Text属性这一事实,因此您可以使用Run为每个绑定设置多个绑定 . 如果您在开发Windows Phone时没有找到这个内容,这非常有用)

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

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

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

    这将显示文本(这是所有Textblocks所做的),而不必再进行任何编码 . 你可能会在它们上留一小部分让它们看起来正确 .

  • 11

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

相关问题