存储int的字符串的字符串格式?

时间:2017-02-11 13:44:18

标签: c# wpf string

出于原因,我必须将intdecimal存储为字符串。可以像这样输入1234或类似1234.00的值,但记住它们是strings

但是,我在dsplaying格式化datagrid列中的值时遇到了问题。

这显然不起作用"{Binding Value, StringFormat={}{0:#,#.00}}",但适用于decimal值。

我尝试了各种常用的格式,但我无法解决这个问题。

我正在尝试格式化这样的值,

string值为1234.00时,请将其格式化并显示如下:

  

1234

不喜欢这样:

  

1234.00

但如果string这样的值,

  

1234.45

让它显示如下:

  

1234.45

如何格式化string以显示我需要的方式?

2 个答案:

答案 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;
    }
}

我希望将来可以帮助某人。