TextBox.textを設定するために使用された場合、私のImultibindingConverterが文字列の配列を取得するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2933183

質問

私は、子要素にコンバーターもあるコンバーターでマルチバインディングを使用しようとしています。

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。

役に立ちましたか?

解決

おそらく、locializedMessageParameterConverterコンバーターのターゲットタイプパラメーターはSystem.Stringです。これは、バインディングのターゲットタイプがマルチバインディングから継承され、マルチバインディングのターゲットタイプがsystem.stringであるためです。

同様の問題については、次の記事を参照してください。 マルチバリューコンバーター、値コンバーター、およびターゲットタイプが間違っている場合

Microsoft Connectによると、これはWPF 4.0で修正されています。見る: Microsoft Connect

上記の記事では、回避策についても説明しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top