我正在尝试显示地址标签。我想要的是如果AddresssLine2不是空字符串(它永远不为空)它应该显示它然后换行(我使用VB,所以它的& #x0a),否则只显示AddressLine2,这是一个空字符串,所以在escense它被忽略。但是,完全忽略AddressLine2的内部绑定的StringFormat。它只显示AddressLine2的值并忽略StringFormat。我甚至尝试将常量只放入StringFormat(StringFormat =“hi”),但它忽略了它并直接绑定到AddressLine2。 这是我的标记。
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} 
{1}
{2} {3}, {4} {5}">
<Binding Path="FullName" />
<Binding Path="AddressLine1" />
<Binding Path="AddressLine2" StringFormat="{}{0}
" />
<Binding Path="City" />
<Binding Path="State" />
<Binding Path="ZipCode" />
</MultiBinding>
</TextBlock.Text>
我的问题是:为什么忽略内部的StringFormat(我尝试了所有不同的组合; "'{0}
'"
,"'{}{0}
'"
," {0}
"
,没有工作)?
另外,有没有更好的方法(在XAML中,我不想要转换器或任何代码)?
答案 0 :(得分:2)
MSDN说StringFormat属性获取或设置一个字符串,该字符串指定如果将绑定值显示为字符串,如何格式化绑定。
由于您正在使用其值,而不是在多重绑定中显示它,因此它将使用MultiBinding StringFormat中的值。
简而言之:MultiBindings中Bindings的StringFormat可以忽略不计。
使用MultiBinding时, StringFormat属性仅适用 当它在MultiBinding上设置时。 设置的StringFormat的值 在任何子绑定对象上 忽略。一个参数的数量 复合字符串格式不能超过 子绑定对象的数量 MultiBinding。
解决方法:展开MultiBinding StringFormat:
StringFormat="{}{0} 
{1}
{2}
{3}, {4} {5}"
但我想你也可以想出那个;)