Как использовать stringformat в multibinding в WPF XAML

Как вы знаете, StringFormat имеет большое значение для представления данных в WPF. Моя проблема заключается в том, как использовать StringFormat при многосвязности в WPF?

Если я приведу очень простой пример:

Имеются переменные A и B, значения которых 10.255555 и 25.6999999

И мы хотим показать им 10.2,25.6?

Как я могу сделать это с помощью multibinding? Обычно это кусок пирога с ValueConverter

Любая помощь и идеи по этой теме будут очень оценены

Ответы

Ответ 1

Просто установите свойство StringFormat на MultiBinding; использовать заполнители ({0}, {1}...) для каждой привязки в многосвязном режиме и при необходимости включать спецификаторы формата (например, F1 для десятичного числа с 1 десятичной цифрой)

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:F1}{1:F1}">
            <Binding Path="A" />
            <Binding Path="B" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Часть {} в начале - это строка формата - escape-последовательность (в противном случае анализатор XAML рассмотрит { как начало расширения разметки)

Ответ 2

Для упрощения вы можете использовать два TextBlock/Labels для отображения значений.

Если вы используете .Net4, вы можете связать в элементе Run Inline TextBlock

<TextBlock>
    <Run Text="{Binding A, StringFormat={}{0:F1}}"/>
    <Run Text="{Binding B, StringFormat={}{0:F1}}"/>
</TextBlock>

Ответ 3

Если кто-то ищет "Форматы времени", это для 24-часовых часов, как я пришел к этому сообщению:

<TextBlock TextAlignment="Center">
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0:HH:mm} - {1:HH:mm}">
             <Binding Path="StartTime" />
             <Binding Path="EndTime" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Ведущие 0: и 1: являются ссылкой на привязки

[0: hh: mm tt] для отображения AM/PM