Wpf StringFormat的多重绑定-为什么targetType==对象在内部转换器中?

Wpf StringFormat的多重绑定-为什么targetType==对象在内部转换器中?,wpf,xaml,data-binding,type-conversion,Wpf,Xaml,Data Binding,Type Conversion,我使用多重绑定和字符串格式将两个字符串绑定到一个文本框。当我向其中一个内部绑定添加转换器时,我注意到一些奇怪的事情,如: <TextBox> <TextBox.Text> <MultiBinding StringFormat="{}{0} {1} "> <Binding Path="Foo" Converter="{StaticResource someC

我使用多重绑定字符串格式将两个字符串绑定到一个文本框。当我向其中一个内部绑定添加转换器时,我注意到一些奇怪的事情,如:

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

在转换器中,TargetType属性将是object。直接在文本属性上使用相同的转换器(没有多重绑定),它是字符串

我想知道为什么会发生这种情况,以及是否有任何方法让转换器知道父绑定的类型(不确定这里的术语是否正确)


我问这个问题的原因是,我通常检查转换器中的to/from类型,然后返回Binding.DoNothing如果不匹配。

当您直接在文本属性上使用someConverter时,TargetType将是字符串,因为它基于文本属性的类型。但是,当您在多绑定内部的绑定中使用转换器时,没有关于TargetType的信息,默认情况下使用对象

可能您熟悉IMultiValueConverter,因此当您使用它时,TargetType将如您所期望的那样是字符串。请看下面的示例:

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

谢谢你的回答!很明显,内部绑定不是文本的直接子级,而是多重绑定的直接子级,但是使用StringFormat,我假设它需要字符串。现在,您所建议的是一个可接受的解决方案(对于转换器中的类型验证不太挑剔),但它需要为相同的任务复制现有转换器(现在使用多值)。