Perché il mio MultiBinding Converter ottenere un array di stringhe quando viene utilizzato per TextBox.Text set?
-
05-10-2019 - |
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.
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.