我在Text属性中有一个带有MultiBinding的TextBlock,而StringFormat用两个附加内容连接两个结果。
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}" >
<Binding Path="Version" />
<Binding Path="OldVersion" StringFormat="{}'({0})'" TargetNullValue=""/>
</MultiBinding>
</TextBlock.Text>
第一个StringFormat按预期工作,但第二个不应用:它返回没有括号的值。我不想在第一个StringFormat中使用括号,因为有时第二个值是Nothing。 提前谢谢。
答案 0 :(得分:2)
StringFormat
(msdn)时,内部MultiBinding
将被忽略。
使用MultiBinding时,StringFormat属性仅适用 当它在MultiBinding上设置时。 StringFormat的值是 在任何子项上设置绑定对象将被忽略。参数个数 在复合字符串格式中不能超过子绑定的数量 MultiBinding中的对象。
您可以使用以下代码代替MultiBinding
:
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Version}" />
<TextBlock Text="{Binding OldVersion, StringFormat=({0}), TargetNullValue=''}" />
</StackPanel>
或者您可以为OldVersion
属性创建包装器属性:
public string OldVersionEx
{
get
{
if (string.IsNullOrEmpty(OldVersion))
return null;
else
return "(" + OldVersion + ")";
}
}
在这种情况下绑定如下:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}" >
<Binding Path="Version" />
<Binding Path="OldVersionEx"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>