如何将多个值绑定到单个WPF TextBlock?
我目前正在使用下面的TextBlock
绑定名为Name
的属性的值:
<TextBlock Text="{Binding Name}" />
现在,我想要将另一个名为ID
属性绑定到同一个TextBlock
。
是否有可能将两个或更多的值绑定到同一个TextBlock
? 可以用简单的连接来完成,比如Name + ID
,如果没有,还可以怎么接近呢?
您可以使用MultiBinding
与StringFormat
属性结合使用。 用法将类似于以下内容:
<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}}" />