我目前正在使用下面的 TextBlock 来绑定名为 Name 的属性的值:
TextBlock
Name
<TextBlock Text="{Binding Name}" />
现在,我想将另一个名为 ID 的属性绑定到同一个 TextBlock .
ID
是否可以将两个或多个值绑定到同一个 TextBlock ?是否可以通过简单的连接来完成,如 Name + ID ,如果没有,还有什么可以接近?
Name + ID
您可以将MultiBinding与StringFormat属性结合使用 . 用法类似于以下内容:
<TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} + {1}"> <Binding Path="Name" /> <Binding Path="ID" /> </MultiBinding> </TextBlock.Text> </TextBlock>
给定 Foo 的Name值和 1 的ID值,您在TextBlock中输出的值为 Foo + 1 .
Foo
1
Foo + 1
Note: 仅在.NET 3.5 SP1和3.0 SP2或更高版本中支持此功能 .
Note:
我知道这是一个迟到的方式,但我想我还会添加另一种方法 .
您可以利用可以使用“Run s”设置Text属性这一事实,因此您可以使用Run为每个绑定设置多个绑定 . 如果您在开发Windows Phone时没有找到这个内容,这非常有用)
<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>
这将显示文本(这是所有Textblocks所做的),而不必再进行任何编码 . 你可能会在它们上留一小部分让它们看起来正确 .
使用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}}" />
4 回答
您可以将MultiBinding与StringFormat属性结合使用 . 用法类似于以下内容:
给定
Foo
的Name值和1
的ID值,您在TextBlock中输出的值为Foo + 1
.Note:
仅在.NET 3.5 SP1和3.0 SP2或更高版本中支持此功能 .我知道这是一个迟到的方式,但我想我还会添加另一种方法 .
您可以利用可以使用“Run s”设置Text属性这一事实,因此您可以使用Run为每个绑定设置多个绑定 . 如果您在开发Windows Phone时没有找到这个内容,这非常有用)
如果这些只是文本块(因此单向绑定),并且您只想连接值,只需绑定两个文本块并将它们放在水平堆栈面板中 .
这将显示文本(这是所有Textblocks所做的),而不必再进行任何编码 . 你可能会在它们上留一小部分让它们看起来正确 .
使用ValueConverter
并在标记中
. . .