Почему мой ImultibindingConverter получил массив строк при использовании для установки TextBox.Text?
-
05-10-2019 - |
Вопрос
Я пытаюсь использовать 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, чтобы указать свойство текста, моя реализация ImultivalueConverver получает объектную коллекцию строк вместо класса, возвращаемого Ivalueconverter. Похоже, что метод TOSTRING () вызывается в результате внутреннего преобразователя и передается в Imultivalueconverter. Если используется для указания свойства содержимого метки, все хорошо.
Мне кажется, что структура предполагает, что тип возврата будет строка, но почему? Я вижу это для Multi-iinding, поскольку он должен дать результат, который совместим с TextBlock.text, но почему это также может быть так и для привязки внутри Multi-iinding?
Если я удаляю преобразователь из внутренних привязки элементов, возвращаются собственные типы. В моей строке корпуса и INT.
Решение
Вероятно, параметр TargetType вашего LocalizeMessageParameterConverterter преобразователя является System.String. Это связано с тем, что тип целевого типа привязки унаследован от Multi-Iinding, а Targettype MultiBinding является System.String, поскольку TextBlock.text - это свойство String.
Смотрите следующую статью для аналогичной проблемы: Разведатели нескольких значений, векторные преобразователи и случай неправильного типа целевого целевого
Согласно Microsoft Connect, это было зафиксировано в WPF 4.0. Видеть: Microsoft Connect.
Вышеуказанная статья также объясняет обходной путь.