使用StringFormat的MultiBinding - 为什么内部转换器中的targetType ==对象?

时间:2014-02-27 11:22:25

标签: wpf xaml data-binding type-conversion

我使用 Multibinding StringFormat 将两个字符串绑定到TextBox。当我将一个转换器添加到其中一个内部绑定时,我注意到一些奇怪的东西,如:

<TextBox>
    <TextBox.Text>
        <MultiBinding StringFormat="{}{0}  {1} ">
            <Binding Path="Foo" 
                        Converter="{StaticResource someConverter}" 
                        ConverterParameter="true" />
            <Binding Path="Bar"  />
        </MultiBinding>
    </TextBox.Text>
</TextBox>

在转换器中, TargetType 属性将为对象。直接在Text属性上使用相同的转换器(没有多重绑定),它是 string

我想知道为什么会发生,如果有任何方法让转换器知道绑定的类型(不确定是否有术语)这是正确的)。

我问的原因是我经常检查转换器中的往返类型,如果不匹配,我会返回Binding.DoNothing。

1 个答案:

答案 0 :(得分:2)

当您在Text属性上直接使用 someConverter 时, TargetType 将为 String ,因为它基于Text of Type属性。但是当你在Binding中使用放置在MultiBinding中的转换器时,没有关于TargetType的信息,默认情况下使用 Object

也许您熟悉 IMultiValueConverter ,因此当您使用 TargetType 时, String 将如您所料。请看下面的示例:

<TextBox>
  <TextBox.Text>
    <MultiBinding StringFormat="{}{0}  {1} " Converter="{StaticResource someMultiConverter}" ConverterParameter="true" >
      <Binding Path="Foo" />
      <Binding Path="Bar"  />
    </MultiBinding>
  </TextBox.Text>
</TextBox>