C# XAML嵌套绑定字符串格式
我正在尝试显示地址标签。我想要的是,如果AddressLine2不是一个空字符串(它从不为null),它应该显示它,然后是一个换行符(我使用VB,所以它是 ),否则只显示AddressLine2,这是一个空字符串,所以在Essense中它被忽略。但是,AddressLine2内部绑定的StringFormat被完全忽略。它只显示AddressLine2的值,而忽略StringFormat。我甚至尝试只在StringFormat(StringFormat=“hi”)中输入一个常量,但它忽略了它,直接绑定到AddressLine2。 这是我的标记C# XAML嵌套绑定字符串格式,c#,xaml,binding,C#,Xaml,Binding,我正在尝试显示地址标签。我想要的是,如果AddressLine2不是一个空字符串(它从不为null),它应该显示它,然后是一个换行符(我使用VB,所以它是 ),否则只显示AddressLine2,这是一个空字符串,所以在Essense中它被忽略。但是,AddressLine2内部绑定的StringFormat被完全忽略。它只显示AddressLine2的值,而忽略StringFormat。我甚至尝试只在StringFormat(StringFormat=“hi”)中输入一个常量,但它忽略
<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中,我不希望后面有转换器或任何代码)?MSDN说,如果属性将绑定值显示为字符串,则该属性获取或设置一个字符串,该字符串指定如何格式化绑定
因为您使用的是它的值,而不是在多重绑定中显示它,所以它将使用多重绑定字符串格式中的值
简而言之:可以说,多绑定中绑定上的StringFormat将被忽略
使用多重绑定时
StringFormat属性仅适用
在多重绑定上设置时。
设置的StringFormat的值
在任何子绑定对象上
忽略。表中的参数数
复合字符串格式不能超过
中的子绑定对象数
多重绑定
解决方法:展开多重绑定字符串格式:
StringFormat="{}{0} 
{1}
{2}
{3}, {4} {5}"
但我想你也能猜出来;) 多谢各位。事实上,我刚刚意识到我所尝试的是愚蠢的,即使成功了,我也不会得到我想要的结果。你知道如何有条件地插入新行吗?没问题!您可以使用转换器或全Xaml解决方案:使用DataTemplate,设置其样式,并添加触发器以隐藏行,将其放置在ContentControl上,并让Content属性绑定到DataContext。