我目前正在使用TextBlock
以下内容绑定名为的属性的值Name
:
<TextBlock Text="{Binding Name}" />
现在,我想将另一个名为的属性绑定ID
到相同的TextBlock
.
是否可以将两个或多个值绑定到同一个TextBlock
?可以通过简单的连接来完成,例如Name + ID
,如果不能,还有什么方法可以解决?
我目前正在使用TextBlock
以下内容绑定名为的属性的值Name
:
<TextBlock Text="{Binding Name}" />
现在,我想将另一个名为的属性绑定ID
到相同的TextBlock
.
是否可以将两个或多个值绑定到同一个TextBlock
?可以通过简单的连接来完成,例如Name + ID
,如果不能,还有什么方法可以解决?
您可以将 aMultiBinding
与StringFormat
属性结合使用。用法类似于以下内容:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} + {1}">
<Binding Path="Name" />
<Binding Path="ID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
给出和的值Name
,您在 TextBlock 中的输出将是。Foo
ID
1
Foo + 1
注意:这仅在 .NET 3.5 SP1 和 3.0 SP2 或更高版本中受支持。
我知道这有点晚了,但我想我会添加另一种方式来做到这一点。
您可以利用 Text 属性可以使用“ Run s”设置这一事实,因此您可以使用 Run 为每个绑定设置多个绑定。如果您无权访问 MultiBinding(我在为 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 所做的),而无需进行更多编码。不过,您可能会在它们上留一点边距以使它们看起来正确。
使用值转换器
[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}}" />