如何将多个值绑定到单个WPF文本块?

如何将多个值绑定到单个WPF文本块?,wpf,data-binding,binding,textblock,multibinding,Wpf,Data Binding,Binding,Textblock,Multibinding,我目前正在使用下面的TextBlock绑定名为Name的属性的值: <TextBlock Text="{Binding Name}" /> 现在,我想将另一个名为ID的属性绑定到相同的TextBlock 是否可以将两个或多个值绑定到同一个TextBlock?它可以通过简单的连接来实现吗,比如Name+ID,如果不能,还有其他方法可以实现吗?使用 在标记中 <src:MyConverter x:Key="MyConverter"/> 。 . 您可以使用与属性

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

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

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

是否可以将两个或多个值绑定到同一个
TextBlock
?它可以通过简单的连接来实现吗,比如
Name+ID
,如果不能,还有其他方法可以实现吗?

使用

在标记中

<src:MyConverter x:Key="MyConverter"/>

。 .


您可以使用与属性组合的。用法如下所示:

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

给定
Name
Foo
ID
1
,则文本块中的输出将是
Foo+1


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

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

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


这将显示文本(这是所有文本块所做的),而无需再进行任何编码。你可以给它们留一点空白,让它们看起来更合适。

我知道这已经晚了,但我想我应该添加另一种方法

您可以利用文本属性可以使用“s”设置这一事实,因此您可以使用一次运行为每个绑定设置多个绑定。如果您没有访问多重绑定的权限(我在为Windows Phone开发时没有找到多重绑定),这将非常有用



@Preet-实际上,我不确定在这种情况下,{}是否是必需的,因为它是在MSDN示例中使用的,所以我将其包括在内。但是,一般来说,它需要作为XAML解析器的转义序列,以避免与绑定标记扩展混淆。如果在诸如
DataGrid
之类的东西中使用此方法,很遗憾排序行为不起作用。一个更合适的解决方案是在模型中创建一个只读属性,并使用适当的字符串格式进行绑定。不用说,这是一种快速格式化的简洁方法,尽管有点冗长。您只需要{}当格式化字符串以参数{0}开头时,如果格式化字符串以文本开头则不需要。例如:“{{0}+{1}”第{0}页,共{1}”它在WPF项目.Net 4.0 Visual Studio 2017上不起作用。@Patrick的解决方案对我有效。我没法让它工作。我遇到此错误
XamlParseException:无法在类型为“Binding”的“Path”属性上设置“Binding”。“绑定”只能在DependencyObject的DependencyProperty上设置。
当绑定到作为DynamicSource来源的多个字符串时,这是一种非常方便的方法,因为不能使用StringFormat的多重绑定。我刚刚尝试过这个方法。它可以工作,但是由于某种原因,绘制的每个元素(甚至几何体)(刷新时)现在都会闪烁每个记号。尝试另一种方法。如果文本必须本地化,这可能会变得很困难,因为顺序是硬编码的。这种方法的另一个用法是为每个绑定应用不同的样式2019Best Response是-这是6年前编写的,您将“Name”作为第一个参数绑定到转换器(代码中称为value),ID(问题中的字符串)作为第二个参数。
<TextBlock>
    <TextBlock.Text>    
        <MultiBinding StringFormat="{}{0} + {1}">
            <Binding Path="Name" />
            <Binding Path="ID" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Name}"/>
        <TextBlock Text="{Binding ID}"/>
    </StackPanel>
<TextBlock>
  <Run Text="Name = "/>
  <Run Text="{Binding Name}"/>
  <Run Text=", Id ="/>
  <Run Text="{Binding Id}"/>
</TextBlock>