Answers:
您可以将其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
。
Note:
.NET 3.5 SP1和3.0 SP2或更高版本仅支持此功能。
DataGrid
不幸的是,如果您在某种排序行为中使用此方法,将无法正常工作。一个更合适的解决方案是在您的模型中创建一个具有绑定的合适字符串格式的只读属性。不用说,这是一种快速格式化的巧妙方法,尽管有点冗长。
XamlParseException: A 'Binding' cannot be set on the 'Path' property of type 'Binding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
我知道这很晚了,但我想我会添加另一种方式。
您可以利用以下事实:可以使用“ Run s” 来设置Text属性,因此您可以使用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所做的),而无需执行任何其他编码。您可能会给它们留一点利润,以使它们看起来正确。
[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}}" />