Pregunta

Estoy intentando utilizar un MultiBinding con un convertidor, donde los elementos secundarios también tienen un convertidor.

Las miradas XAML de esta manera:

<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>

El problema que estoy enfrentando aquí es, cada vez que esto se utiliza con un TextBlock para especificar la propiedad Text, mi implementación IMultiValueConverter obtiene una colección de objetos de cadenas en lugar de la clase devuelta por el IValueConverter. Parece que el método ToString () se llama en el resultado del convertidor interno y se pasa al IMultiValueConverter. Si se usa para especificar la propiedad contenido de la etiqueta, todo está bien.

Me parece que el marco está asumiendo que el tipo de retorno será de cadena, pero ¿por qué? Puedo ver esto por el MultiBinding ya que debería producir un resultado que sea compatible con TextBlock.Text, pero ¿por qué esto también ser el caso de los enlaces dentro de un MultiBinding?

Si quito el convertidor de los elementos de unión internas, se devuelven los tipos nativos. En mi caso y cadena int.

¿Fue útil?

Solución

Probablemente el parámetro targetType de su convertidor localizedMessageParameterConverter es System.String. Esto es porque el tipo de destino del Bindings se hereda de la MultiBinding, y la targetType de la MultiBinding se System.String porque TextBlock.Text es una propiedad de cadena.

Consulte el artículo siguiente para un problema similar: Multi- Convertidores de valor, valor Convertidores y el caso del tipo de destino incorrecto

De acuerdo con Microsoft Connect, esto se ha solucionado en WPF 4.0. Ver: microsoft Connect

El artículo anterior también explica una solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top