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

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

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

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

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

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

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

给定一个Foo的名字和一个ID为1的值,你在TextBlock中的输出就是Foo + 1

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

我知道这是一个很晚的方式,但我想我会再添加一个这样做的方式。

您可以利用Text属性可以使用“ Run s”设置的事实,因此您可以使用每个Run的Run来设置多个绑定。 如果您无法访问MultiBinding(在Windows Phone上进行开发时未find该选项)

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

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

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

这将显示文本(这是所有的文本块),而不必做更多的编码。 你可能会在他们身上留下一点小小的空白,让他们看起来正确。

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