WPF 数据网格货币格式转换器
WPF datagrid Currency formatting Converter
我正在尝试在 WPF 数据网格中创建一个列,以按以下格式显示货币:
value <= 9999, display format set to ,234;
value <= 99999, display format set to k;
value >99999, display format set to M;
此外,我需要具有用户可以看到实际值并在鼠标单击时编辑值的功能。
我一直在尝试了解 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>
希望对遇到同样问题的人有所帮助。
我正在尝试在 WPF 数据网格中创建一个列,以按以下格式显示货币:
value <= 9999, display format set to ,234;
value <= 99999, display format set to k;
value >99999, display format set to M;
此外,我需要具有用户可以看到实际值并在鼠标单击时编辑值的功能。
我一直在尝试了解 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>
希望对遇到同样问题的人有所帮助。