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


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

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

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

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

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

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

3 14

3 ответа:

Просто установите свойство 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 рассматривал бы { как начало расширения разметки)

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

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

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

Если кто-то ищет "форматы времени", это для 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