出于原因,我必须将int
和decimal
存储为字符串。可以像这样输入1234
或类似1234.00
的值,但记住它们是strings
但是,我在dsplaying格式化datagrid列中的值时遇到了问题。
这显然不起作用"{Binding Value, StringFormat={}{0:#,#.00}}"
,但适用于decimal
值。
我尝试了各种常用的格式,但我无法解决这个问题。
我正在尝试格式化这样的值,
当string
值为1234.00
时,请将其格式化并显示如下:
1234
不喜欢这样:
1234.00
但如果string
这样的值,
1234.45
让它显示如下:
1234.45
如何格式化string
以显示我需要的方式?
答案 0 :(得分:1)
您可以使用IValueConverter进行转换,例如:
fail()
请注意,public class IntDecConverter : IValueConverter
{
public object Convert(Object value, Type type, Object parameter, CultureInfo CultureInfo)
{
return System.Convert.ToDecimal(value).ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
可能会导致错误的转化 - 在这种情况下,使用
.
替换为.
,
作为转换。
创建转换器的资源
return System.Convert.ToDecimal(((string)value).Replace(".", ",")).ToString();
并使用它:
<Window.Resources>
<local:IntDecConverter x:Key="intDecConverter" />
</Window.Resources>
答案 1 :(得分:0)
对于可能偶然发现这个帖子的人的未来参考,我会发布我想出的解决方案。所以在评论和@Fruchtzwerg的帮助下,这些人。要查看此代码的大部分内容,请参阅@Fruchtzwerg's answer here in this thread.
我遇到的问题是DataGrid
不允许在DataGrid
列中输入小数点,这是因为我相信绑定中的PropertyChanged
。
所以解决这个问题。
public class IntDecConverter : IValueConverter
{
public object Convert(Object value, Type type, Object parameter, CultureInfo cultureInfo)
{
if (value == null) return value;
char[] characters = value.ToString().ToCharArray();
if (characters[characters.Length - 1].ToString() != ".")
{
System.Convert.ToDecimal(value).ToString();
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
我希望将来可以帮助某人。