我目前正在使用下面的TextBlock来绑定名为Name的属性的值:
TextBlock
Name
<TextBlock Text="{Binding Name}" />
现在,我想将名为ID的另一个属性绑定到相同的TextBlock。
ID
是否可以将两个或多个值绑定到同一个TextBlock?它可以通过简单的连接来完成,如Name + ID,如果不能,还可以如何处理?
Name + ID
使用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}}" />
可以将MultiBinding与StringFormat属性结合使用。用法如下:
MultiBinding
StringFormat
<TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} + {1}"> <Binding Path="Name" /> <Binding Path="ID" /> </MultiBinding> </TextBlock.Text> </TextBlock>
给Name一个值Foo和ID一个值1,你在TextBlock中的输出将是Foo + 1。
Foo
1
Foo + 1
注意:仅在. net 3.5 SP1和3.0 SP2或更高版本中支持。
如果这些只是文本块(因此单向绑定),你只是想连接值,只是绑定两个文本块,并把它们放在一个水平堆叠面板。
<StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Name}"/> <TextBlock Text="{Binding ID}"/> </StackPanel>
这将显示文本(这是所有的textblock做),而不必做任何更多的编码。你可以在它们上面加一点边距,让它们看起来正确。
我知道这有点晚了,但我想再补充一种方法。
您可以利用Text属性可以使用“运行s”来设置的事实,因此您可以为每个绑定使用Run来设置多个绑定。如果你没有MultiBinding(游戏邦注:这是我在为Windows Phone开发游戏时所未发现的),这将非常有用。
<TextBlock> <Run Text="Name = "/> <Run Text="{Binding Name}"/> <Run Text=", Id ="/> <Run Text="{Binding Id}"/> </TextBlock>