wpf StringFormat的问题

时间:2013-03-20 16:59:48

标签: wpf xaml multibinding

我在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。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

使用StringFormatmsdn)时,

内部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>