我使用 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。
答案 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>