Почему мой ImultibindingConverter получил массив строк при использовании для установки TextBox.Text?

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

Вопрос

Я пытаюсь использовать 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.

Вышеуказанная статья также объясняет обходной путь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top