У меня есть ситуация, в которой я должен показать целочисленное значение, связанное со свойством на моем контексте данных, после проведения его через два отдельных преобразования:
Я понимаю, что мог сделать оба шага путем создания моего собственного преобразователя (который реализует IValueConverter). Однако я уже получил отдельный преобразователь значения, который делает просто первый шаг, и второй шаг покрыт Int32Converter.
Существует ли способ, которым я могу объединить эти два существующих класса в цепочку в XAML, не имея необходимость создавать дальнейший класс, который агрегировал их?
Если я должен разъяснить какое-либо из этого, сообщите мне.:)
Спасибо.
Да, есть способы объединить преобразователи в цепочку, но это действительно так не выглядят красиво и здесь вам это не нужно. Если вам когда-нибудь это понадобится, спросите себя, действительно ли это правильный путь? Простой всегда работает лучше, даже если вам нужно написать свой собственный конвертер.
В вашем конкретном случае все, что вам нужно сделать, это отформатировать преобразованное значение в строку. Свойство StringFormat
в привязке
- ваш друг.
<TextBlock Text="{Binding Value,Converter={StaticResource myConverter},StringFormat=D}" />
Нашел именно то, что искал, любезно предоставленный Джошем Смитом: Конвертеры стоимости трубопроводов (ссылка на 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>
Отличный материал. Спасибо, Джош. :)