XAML嵌套绑定StringFormat

时间:2010-08-11 13:54:26

标签: c# xaml binding

我正在尝试显示地址标签。我想要的是如果AddresssLine2不是空字符串(它永远不为空)它应该显示它然后换行(我使用VB,所以它的& #x0a),否则只显示AddressLine2,这是一个空字符串,所以在escense它被忽略。但是,完全忽略AddressLine2的内部绑定的StringFormat。它只显示AddressLine2的值并忽略StringFormat。我甚至尝试将常量只放入StringFormat(StringFormat =“hi”),但它忽略了它并直接绑定到AddressLine2。 这是我的标记。

<TextBlock.Text>  
   <MultiBinding StringFormat="{}{0} &#x0a;{1}&#x0a;{2} {3}, {4} {5}">  
     <Binding Path="FullName" />  
     <Binding Path="AddressLine1" />  
     <Binding Path="AddressLine2" StringFormat="{}{0}&#x0a;" />  
     <Binding Path="City" />  
     <Binding Path="State" />  
     <Binding Path="ZipCode" />  
  </MultiBinding>  
</TextBlock.Text>  

我的问题是:为什么忽略内部的StringFormat(我尝试了所有不同的组合; "'{0}&#x0a;'""'{}{0}&#x0a;'"" {0}&#x0a;",没有工作)? 另外,有没有更好的方法(在XAML中,我不想要转换器或任何代码)?

1 个答案:

答案 0 :(得分:2)

MSDN说StringFormat属性获取或设置一个字符串,该字符串指定如果将绑定值显示为字符串,如何格式化绑定。

由于您正在使用其值,而不是在多重绑定中显示它,因此它将使用MultiBinding StringFormat中的值。

简而言之:MultiBindings中Bindings的StringFormat可以忽略不计。

  

使用MultiBinding时,   StringFormat属性仅适用   当它在MultiBinding上设置时。   设置的StringFormat的值   在任何子绑定对象上   忽略。一个参数的数量   复合字符串格式不能超过   子绑定对象的数量   MultiBinding。

解决方法:展开MultiBinding StringFormat:

StringFormat="{}{0} &#x0a;{1}&#x0a;{2}&#x0a;{3}, {4} {5}"

但我想你也可以想出那个;)