Frage

Ich versuche, ein Multibinding mit einem Konverter zu verwenden, in dem die untergeordneten Elemente auch einen Konverter haben.

Die XAML sieht so aus:

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

Das Problem, das ich mit Blick auf bin hier, wann immer dies mit einem Textblock verwendet wird, um die Text-Eigenschaft angeben, meine IMultiValueConverter Implementierung erhält eine Objektsammlung von Strings, anstatt die Klasse durch die IValueConverter zurückgegeben. Es scheint, dass die Methode ToString () auf das Ergebnis des inneren Wandler und an den IMultiValueConverter genannt wird. Wenn sie verwendet wird, um die Content-Eigenschaft von Label angeben, alles ist gut.

Es scheint mir, dass der Rahmen wird unter der Annahme, dass der Rückgabetyp String sein wird, aber warum? Ich kann dies für den Multibinding sehen, da es ein Ergebnis liefern soll, die mit TextBlock.Text kompatibel ist, aber warum soll dies auch der Fall für die Bindungen wird in einem Multibinding?

Wenn ich den Konverter von den inneren Bindungselemente entfernen, werden die nativen Typen zurückgegeben. In meinem Fall String und int.

War es hilfreich?

Lösung

Wahrscheinlich die target Parameter Ihres localizedMessageParameterConverter Konverter ist System.String. Dies liegt daran, der Zieltyp des Bindungen aus der Multibinding geerbt, und die target des Multibinding ist System.String weil TextBlock.Text eine String-Eigenschaft ist.

Sehen Sie im folgenden Artikel für ein ähnliches Problem: Multi- Wert-Wandler, Wert-Wandler und der Fall des falschen Zieltypen

Laut Microsoft Connect wurde dies in WPF 4.0 behoben. Siehe: Microsoft Connect

Der obige Artikel beschreibt auch eine Abhilfe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top