2

子要素にもコンバーターがあるコンバーターでMultiBindingを使用しようとしています。

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>

ここで直面している問題は、これをTextBlockで使用してTextプロパティを指定するたびに、IMultiValueConverter実装が、IValueConverterによって返されるクラスではなく文字列のオブジェクトコレクションを取得することです。ToString()メソッドは、内部コンバーターの結果で呼び出され、IMultiValueConverterに渡されるようです。LabelのContentプロパティを指定するために使用する場合、すべて問題ありません。

フレームワークは戻り型が文字列であると想定しているように見えますが、なぜですか?TextBlock.Textと互換性のある結果が得られるはずなので、MultiBindingでこれを確認できますが、MultiBinding内のBindingsでもこれが当てはまるのはなぜですか?

内部のBinding要素からコンバーターを削除すると、ネイティブタイプが返されます。私の場合、stringとint。

4

1 に答える 1

2

おそらく、localizedMessageParameterConverterコンバーターのtargetTypeパラメーターはSystem.Stringです。これは、BindingsのターゲットタイプがMultiBindingから継承され、TextBlock.Textが文字列プロパティであるため、MultiBindingのtargetTypeがSystem.Stringであるためです。

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

Microsoft Connectによると、これはWPF4.0で修正されています。参照:Microsoft Connect

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

于 2010-05-29T17:39:43.947 に答える