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