2

我正在尝试将 MultiBinding 与转换器一起使用,其中子元素也有转换器。

XAML 看起来像这样:

<TextBlock>
<TextBlock.Text>
    <MultiBinding Converter="{StaticResource localizedMessageConverter}" ConverterParameter="{x:Static res:Resources.RecordsFound}" >
        <Binding Converter="{StaticResource localizedMessageParameterConverter}" ConverterParameter="ALIAS" Path="Alias" Mode="OneWay" />
        <Binding Converter="{StaticResource localizedMessageParameterConverter}" ConverterParameter="COUNT" Path="Count" Mode="OneWay" />
    </MultiBinding>
</TextBlock.Text>

我在这里面临的问题是,每当它与 TextBlock 一起使用来指定 Text 属性时,我的 IMultiValueConverter 实现都会获取字符串的对象集合,而不是 IValueConverter 返回的类。似乎对内部转换器的结果调用了 ToString() 方法并传递给 IMultiValueConverter。如果用于指定 Label 的 Content 属性,则一切正常。

在我看来,框架假设返回类型将是字符串,但为什么呢?我可以在 MultiBinding 中看到这一点,因为它应该产生与 TextBlock.Text 兼容的结果,但为什么 MultiBinding 中的 Bindings 也会出现这种情况?

如果我从内部 Binding 元素中删除转换器,则会返回本机类型。在我的情况下,字符串和 int。

4

1 回答 1

2

您的localizedMessageParameterConverter 转换器的targetType 参数可能是System.String。这是因为 Bindings 的目标类型继承自 MultiBinding,而 MultiBinding 的 targetType 是 System.String,因为 TextBlock.Text 是字符串属性。

有关类似问题,请参阅以下文章:多值转换器、值转换器和错误目标类型的情况

根据 Microsoft Connect,这已在 WPF 4.0 中得到修复。请参阅:微软连接

上面的文章还解释了一种解决方法。

于 2010-05-29T17:39:43.947 回答