Почему мой IMultiBindingConverter получает массив строк, когда используется для установки TextBox.Text? - PullRequest
2 голосов
/ 29 мая 2010

Я пытаюсь использовать 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. Если используется для указания свойства Content метки, все хорошо.

Мне кажется, что фреймворк предполагает, что возвращаемый тип будет строковым, но почему? Я вижу это для MultiBinding, так как он должен дать результат, совместимый с TextBlock.Text, но почему это также относится к Bindings внутри MultiBinding?

Если я удалю конвертер из внутренних элементов Binding, будут возвращены собственные типы. В моем случае строка и int.

1 Ответ

2 голосов
/ 29 мая 2010

Возможно, параметром targetType вашего преобразователя localizedMessageParameterConverter является System.String. Это связано с тем, что целевой тип Bindings наследуется от MultiBinding, а targetType MultiBinding имеет значение System.String, поскольку TextBlock.Text является строковым свойством.

См. Следующую статью о подобной проблеме: Многозначные преобразователи, преобразователи значений и случай неверного целевого типа

Согласно Microsoft Connect, это было исправлено в WPF 4.0. См .: Microsoft Connect

Данная статья также объясняет обходной путь.

...