Member 13063329 Ответов: 1

Форматирование числовой строки до определенного количества десятичных знаков в XAML


У меня есть текстовый блок, который привязан к строковому свойству, которое является демическим числом. На мой взгляд, я хочу отформатировать его до одной цифры после десятичной точки.
Я попробовал несколько подходов, но ни один не сработал. Любая идея может быть неправильной или что еще можно попробовать?

Что я уже пробовал:

My TextBlock xaml:
<TextBlock Grid.Row="5" Text="{Binding SelChem.Lel, StringFormat={}{0:F1}}"/>

Я тоже пытался:
<TextBlock Grid.Row="5" Text="{Binding SelChem.Lel, StringFormat=N2}"/>

Richard Deeming

StringFormat=N2 для меня это прекрасно работает.

Проверьте окно вывода Visual Studio на наличие ошибок привязки данных.

Member 13063329

Попробовал и это. Данные отображаются правильно, просто не отформатированы, так что никаких ошибок привязки нет.

Richard Deeming

Что это за тип недвижимости?

Member 13063329

В SelChem.lel SelChem-это мой объект модели, а lel-строковое свойство

Richard Deeming

Ну, тогда вот в чем проблема! :)

То StringFormat применяется только к тем типам, которые являются IFormattable - напр: double, float, DateTime, прием.

Один string не является IFormattable, так что StringFormat игнорируется.

Либо предоставьте число как числовой тип, либо измените формат, используемый при преобразовании числа в строку.

1 Ответов

Рейтинг:
0

J. Calhoun

Вы можете написать конвертер, на который будут ссылаться в привязке. Например:

public class RoundMyNumberConverter : IValueConverter
{
    public object ConvertNumber(object value, Type targetType, object paramater, CultureInfo culture)
        {
            double result = 0;
            if (value != null && (double.TryParse(value.toString(), out result)))
                return Math.Round(result,1);
            else
                return value;
        }

    public object ConvertBack(object value, Type targetType, object paramater, CultureInfo culture)
        {
            return value;
        }
}


Примечание: Математика.Round(result, 1<- это то, сколько мест вы хотите после десятичной дроби), поэтому конвертер примет значение привязки, прогонит его через конвертер и затем отобразит созданное значение.

Затем вы просто ссылаетесь на это внутри xaml как на конвертер.

Примечание: не забудьте ссылаться на свой проект и сборку, если они находятся вне вашего текущего проекта, например:
xmlns:cnvrtr="clr-namespace:MyConverterProject;assembly=MyConverterProject


Также вы должны перечислить его в качестве ресурса внутри пользовательского элемента управления или таблице?
<Grid>
    <Grid.Resources>
        <cnvrtr:RoundMyNumberConverter x:key="myConverter"/>
    </Grid.Resources>

    <TextBlock Grid.Row="5" Text="{Binding SelChem.Lel, Converter={StaticResource myConverter}}"/>
</Grid>


Дайте мне знать, если у вас возникнут еще вопросы!