Domanda

Sto cercando di usare un MultiBinding con un convertitore in cui gli elementi figlio hanno anche un convertitore.

L'aspetto XAML in questo modo:

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

Il problema che sto affrontando qui è, ogni volta che questo viene utilizzato con un TextBlock per specificare la proprietà Text, mia implementazione IMultiValueConverter ottiene una raccolta oggetto di stringhe al posto della classe restituita dal IValueConverter. Sembra che il metodo ToString () viene chiamata sul risultato del convertitore interno e passato al IMultiValueConverter. Se utilizzato per specificare la proprietà Content di Label, va tutto bene.

Mi sembra che il quadro è supponendo che il tipo di ritorno sarà stringa, ma perché? Posso vedere questo per il MultiBinding in quanto dovrebbe produrre un risultato che è compatibile con TextBlock.Text, ma perché anche questo è il caso per le Associazioni all'interno di un MultiBinding?

Se rimuovo il convertitore dagli elementi di rilegatura interni, i tipi nativi vengono restituiti. Nel mio caso d'archi e int.

È stato utile?

Soluzione

Probabilmente il parametro targetType del convertitore localizedMessageParameterConverter è System.String. Questo perché il tipo di destinazione degli attacchi è ereditato dalla MultiBinding, e la targetType del MultiBinding è System.String perché TextBlock.Text è una proprietà di stringa.

Vedere il seguente articolo per un problema simile: Multi Convertitori valore, convertitori valore e il caso del torto tipo di destinazione

Secondo Microsoft Connect, questo è stato risolto in WPF 4.0. Vedere: Microsoft Connect

Il suddetto articolo spiega anche una soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top