我正在尝试使用带有转换器的多键点,在该转换器中,儿童元素也具有转换器。

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>

我在这里面临的问题是,每当将其与文本框架一起用来指定文本属性时,我的ImultivalUeconverter实现都会获得字符串的对象集合,而不是Ivalueconverter返回的类。看来ToString()方法是根据内部转换器的结果调用的,并传递给ImultivalUeconverter。如果用于指定标签的内容属性,则一切都很好。

在我看来,该框架假设返回类型将是字符串,但是为什么呢?我可以看到这是用于多点的,因为它应该产生与textblock.text兼容的结果,但是为什么在多键点内的绑定也是如此?

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

有帮助吗?

解决方案

您本地化的MessageParameTerconverter转换器的targetType参数可能是System.String。这是因为绑定的目标类型是从多接口继承的,并且多键点的目标型是系统。String,因为textblock.text是字符串属性。

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

根据Microsoft Connect,这已在WPF 4.0中修复。看: Microsoft Connect

以上文章还解释了解决方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top