У меня есть ситуация, в которой мне нужно показать целочисленное значение, привязанное к свойству в моем контексте данных, после двух отдельных преобразований:
- Поменяйте местами значение в пределах диапазона (например, диапазон от 1 до 100; значение в контексте данных - 90; пользователь видит значение 10)
- преобразовать число в строку
Я понимаю, что могу выполнить оба шага, создав свой собственный конвертер (который реализует IValueConverter). Однако у меня уже есть отдельный преобразователь значений, который выполняет только первый шаг, а второй шаг покрывается Int32Converter.
Есть ли способ связать эти два существующих класса в XAML без необходимости создавать дополнительный класс, который их объединяет?
Если мне нужно что-то прояснить, дайте мне знать. :)
Спасибо.
wpf
data-binding
xaml
ivalueconverter
Мал Росс
источник
источник
return this.Reverse<IValueConverter>().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));
Нашел именно то, что искал, любезно предоставленный Джошем Смитом: преобразователи ценности трубопроводов (ссылка на archive.org) .
Он определяет
ValueConverterGroup
класс, использование которого в XAML в точности соответствует моим ожиданиям. Вот пример:Отличный материал. Спасибо, Джош. :)
источник
Реализация города из проекта Silverlight Гарета Эванса велик, однако он не поддерживает различные параметры преобразователя.
Я изменил его, чтобы вы могли указывать параметры, разделенные запятыми (если, конечно, вы их не избегаете).
Преобразователь:
Примечание: ConvertBack не реализован здесь, увидеть мой GIST для полной версии.
Реализация:
источник
Да, есть способы связать преобразователи в цепочку, но это выглядит некрасиво и здесь вам не нужно. Если вам когда-нибудь это понадобится, спросите себя, действительно ли это правильный путь? Простой всегда работает лучше, даже если вам нужно написать свой собственный конвертер.
В вашем конкретном случае все, что вам нужно сделать, это отформатировать преобразованное значение в строку.
StringFormat
недвижимость на этоBinding
ваш друг.источник
Вот небольшое расширение ответа Town для поддержки множественной привязки:
источник