Использование 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>