Существует ли способ объединить несколько преобразователей значения в цепочку в XAML?

У меня есть ситуация, в которой я должен показать целочисленное значение, связанное со свойством на моем контексте данных, после проведения его через два отдельных преобразования:

  1. Инвертируйте значение в диапазоне (например, диапазон равняется 1 - 100; значение в datacontext равняется 90; пользователь видит значение 10),
  2. преобразуйте число в строку

Я понимаю, что мог сделать оба шага путем создания моего собственного преобразователя (который реализует IValueConverter). Однако я уже получил отдельный преобразователь значения, который делает просто первый шаг, и второй шаг покрыт Int32Converter.

Существует ли способ, которым я могу объединить эти два существующих класса в цепочку в XAML, не имея необходимость создавать дальнейший класс, который агрегировал их?

Если я должен разъяснить какое-либо из этого, сообщите мне.:)

Спасибо.

117
задан kpozin 6 October 2010 в 15:17
поделиться

2 ответа

Да, есть способы объединить преобразователи в цепочку, но это действительно так не выглядят красиво и здесь вам это не нужно. Если вам когда-нибудь это понадобится, спросите себя, действительно ли это правильный путь? Простой всегда работает лучше, даже если вам нужно написать свой собственный конвертер.

В вашем конкретном случае все, что вам нужно сделать, это отформатировать преобразованное значение в строку. Свойство StringFormat в привязке - ваш друг.

 <TextBlock Text="{Binding Value,Converter={StaticResource myConverter},StringFormat=D}" />
6
ответ дан 24 November 2019 в 02:06
поделиться

Нашел именно то, что искал, любезно предоставленный Джошем Смитом: Конвертеры стоимости трубопроводов (ссылка на archive.org) .

Он определяет класс ValueConverterGroup , использование которого в XAML в точности соответствует моим ожиданиям. Вот пример:

<!-- Converts the Status attribute text to a SolidColorBrush used to draw 
     the output of statusDisplayNameGroup. -->
<local:ValueConverterGroup x:Key="statusForegroundGroup">
  <local:IntegerStringToProcessingStateConverter  />
  <local:ProcessingStateToColorConverter />
  <local:ColorToSolidColorBrushConverter />
</local:ValueConverterGroup> 

Отличный материал. Спасибо, Джош. :)

53
ответ дан 24 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: