WPF 数据网格货币格式转换器



我正在尝试在 WPF 数据网格中创建一个列以以下格式显示货币:

value <= 9999, display format set to $1,234;
value <= 99999, display format set to $12k;
value >99999, display format set to $12M;

此外,我需要具有用户可以看到实际值并在鼠标单击时编辑值的功能。

我一直在尝试获得IValueConverter的概念,但无法获得工作代码。

有人可以帮忙吗?

更新:根据Ramin的回答,它正在部分工作。以下是代码:

public class DollarConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double v = double.Parse(value.ToString());
        if (v <= 9999)
        {
            return v.ToString("C0");
        }
        else if (v <= 999999)
        {
            double vv = v / 1000;
            return vv.ToString("C0") + "K";
        }
        else if (v > 99999)
        {
            double vvv = v / 1000000;
            return vvv.ToString("C0") + "M";
        }
        return v;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在 WPF 中:Binding="{Binding LBRRev, Converter={StaticResource DollarConverter}}"

这不是确切的解决方案,但可以帮助您解决它:

public class StringFormatConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int v = int.Parse(value.ToString());
        if (v <= 9999)
            return v.ToString("C0");
        else if (v <= 99999)
            decimal vv = v / 1000;
            return vv.ToString("C0") + "k"; 
        return v;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在绑定中使用它:

 <DataGridTextColumn  Binding="{Binding Converter={StaticResource StringFormatConverter }}"/>

经过一番研究,我现在有一个工作版本。转换器:

public class DollarConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {            
        double v = double.Parse(value.ToString());
        if (v <= 9999)
        {
            return v.ToString("C0");
        }
        else if (v <= 999999)
        {
            return (v/1000).ToString("C0")+"K";
        }
        else if (v > 999999)
        {
            return (v/1000000).ToString("C1") + "M";
        }

        return v;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

在 xaml 中:

<DataGridTemplateColumn Header="Mat. Rev" Width = "22*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding MatRev, Converter={StaticResource DollarConverter}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=MatRev, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn> 

希望这对有同样问题的人有所帮助。

最新更新