Отображать валюту в двух десятичных знаках, но сохраняя все доступные десятичные дроби - PullRequest
3 голосов
/ 09 марта 2012

Быстрый (надеюсь) вопрос.У меня есть эта DataGrid, содержащая несколько столбцов валюты.То, что я не могу найти, это то, как отобразить валюту в 2 десятичных знака.Но поддержание возможного 3 или 4 десятичного значения в ячейке.Если вы попытались отформатировать строку, но это на самом деле меняет значение.И так же, как и IValueConverter.Так чего мне не хватает?или кто-нибудь может указывать мне в правильном направлении?

РЕДАКТИРОВАТЬ: после предложения я попробовал что-то вроде этого.* Но я не понимаю, ПОЧЕМУ!значения в этих столбцах: красивый и красный текст, синий фон ... но неформатированная строка, просто показывает 0,000 вместо € 0,00

Ответы [ 2 ]

6 голосов
/ 09 марта 2012

Использование StringFormat или односторонняя Converter не должны изменять фактическое значение. Оба из них используются только для отображения.

Например, здесь будет показано десятичное значение в формате валюты с двумя десятичными знаками, но оно не будет обрезаться SomeDecimal до двух десятичных знаков

<TextBox Text="{Binding SomeDecimal, StringFormat=C2}" />

Возможно, вы хотите отобразить значение, используя 2 цифры, но отредактируйте его, используя полные 4 цифры. В этом случае я бы предложил использовать триггер стиля, чтобы отобразить неотформатированное значение во время его редактирования.

<Style x:Key="DecimalTextBoxStyle" TargetType="{x:Type TextBox}">
    <Setter Property="Text" Value="{Binding SomeDecimal, StringFormat=C2}" />
    <Style.Triggers>
        <Trigger Property="IsKeyboardFocusWithin" Value="True">
            <Setter Property="Text" Value="{Binding SomeDecimal}" />
        </Trigger>
    </Style.Triggers>
</Style>

Редактировать

Согласно вашему запросу ниже, чтобы применить этот стиль к DataGridCell, вы можете либо использовать DataGridTemplateColumn и поместить внутри него TextBox с примененным этим стилем, либо вы можете использовать свойства ElementStyle и EditingElementStyle для установить формат привязки

<DataGridTextColumn>
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="{Binding SomeDecimal, StringFormat=C2}" />
        </Style>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Text" Value="{Binding SomeDecimal}" />
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
0 голосов
/ 09 марта 2012

Мой первый инстинкт заключается в том, чтобы просто иметь строку с двумя десятичными знаками и использовать любую структуру, которую вы используете для заполнения сетки данных, если вам нужна полная точность.создадим два столбца, один из которых будет десятичным и имеет полную точность, а другой - строку с двумя десятичными знаками.Вы можете отображать / скрывать столбцы по мере необходимости, чтобы соответствующая версия отображалась в соответствующее время.

...