#xml #xaml #string-formatting #textblock
#xml #xaml #форматирование строки #текстовый блок
Вопрос:
Мои XML-данные:
<Num>12.6</Num>
Я привязываю это к текстовому блоку XAML и хочу отобразить значение в виде округленного числа без десятичной точки. Поэтому это значение должно отображаться как 13. Аналогично, 12.2 должно отображаться как 12 и т.д.
Мне нужен код в StringFormat ниже (в …), чтобы делать то, что я хочу:
<TextBlock Text= "{Binding Num, StringFormat=...}" />
Спасибо.
Ответ №1:
Попробуйте использовать конвертер:
public class StringToDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return double.Parse(value as string);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Затем в xaml объявите конвертер:
<UserControl.Resources>
<local:StringToDoubleConverter x:Key="StringToDoubleConverter"/>
</UserControl.Resources>
И, наконец, используйте его в привязке вместе со StringFormat:
<TextBlock Text= "{Binding Num, StringFormat=n0, Converter={StaticResource StringToDoubleConverter}}" />
Ноль в n0
указывает на отсутствие десятичных знаков (строки стандартного числового формата)
Комментарии:
1. Он по-прежнему отображает строку точно с десятичной запятой и без округления. Должен ли я выполнять какое-либо преобразование? Я подозреваю, что значение в настоящее время обрабатывается как строка. Возможно, мне придется как-то указать, что это число. Спасибо.
2. Это странно. Для меня это работает безупречно, поскольку число равно двойному. Попробуйте использовать n2 вместо n0, чтобы посмотреть, показывает ли он 2 знака после запятой. Кроме того, каков тип Num ?
3. Я не указываю тип Num, кроме того, что он отображается в текстовом блоке. Означает ли это, что он имеет тип string ? Вот почему я задаюсь вопросом о преобразовании.
4. Вам не нужно указывать тип. Это автоматически определяется привязкой. Это будет работать, только если Num является двойным, десятичным или плавающим.
5. Итак, как и где мне указать, что Num является двойным, десятичным или плавающим? Спасибо.