Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML嵌套绑定字符串格式_C#_Xaml_Binding - Fatal编程技术网

C# XAML嵌套绑定字符串格式

C# XAML嵌套绑定字符串格式,c#,xaml,binding,C#,Xaml,Binding,我正在尝试显示地址标签。我想要的是,如果AddressLine2不是一个空字符串(它从不为null),它应该显示它,然后是一个换行符(我使用VB,所以它是 ),否则只显示AddressLine2,这是一个空字符串,所以在Essense中它被忽略。但是,AddressLine2内部绑定的StringFormat被完全忽略。它只显示AddressLine2的值,而忽略StringFormat。我甚至尝试只在StringFormat(StringFormat=“hi”)中输入一个常量,但它忽略

我正在尝试显示地址标签。我想要的是,如果AddressLine2不是一个空字符串(它从不为null),它应该显示它,然后是一个换行符(我使用VB,所以它是 ),否则只显示AddressLine2,这是一个空字符串,所以在Essense中它被忽略。但是,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}
;”
“{0}
;”“
”“{0}
;”
,都不起作用)? 还有,有没有更好的方法来实现这一点(在XAML中,我不希望后面有转换器或任何代码)?

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

因为您使用的是它的值,而不是在多重绑定中显示它,所以它将使用多重绑定字符串格式中的值

简而言之:可以说,多绑定中绑定上的StringFormat将被忽略

使用多重绑定时 StringFormat属性仅适用 在多重绑定上设置时。 设置的StringFormat的值 在任何子绑定对象上 忽略。表中的参数数 复合字符串格式不能超过 中的子绑定对象数 多重绑定

解决方法:展开多重绑定字符串格式:

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

但我想你也能猜出来;)

多谢各位。事实上,我刚刚意识到我所尝试的是愚蠢的,即使成功了,我也不会得到我想要的结果。你知道如何有条件地插入新行吗?没问题!您可以使用转换器或全Xaml解决方案:使用DataTemplate,设置其样式,并添加触发器以隐藏行,将其放置在ContentControl上,并让Content属性绑定到DataContext。