更改 WPF ListView 中的小数点分隔符(绑定、字符串格式)
Change decimal separator in WPF ListView (Binding, String Format)
我有一个带有数字的数据表,它是 ListView 的 ItemsSource,我希望它们以“,”作为小数点分隔符和“。”来格式化为货币。作为组分隔符。
我通常知道它是如何在绑定(XAML 和代码隐藏)中与 StringFormat 一起工作的,如这个问题所示:
Changing the default thousand and decimal separator in a binding
但是这次不起作用:我的 ListView 显示“.”尽管如此,作为小数点分隔符。我的示例中的特殊之处在于我需要在运行时生成 GridViewColumns 并以编程方式将 DataTemplates 加载到它们中,例如:
GridViewColumn Amount_col= new GridViewColumn();
Amount_col.Header = "Gesamt";
DataTemplate dataTemplate = new DataTemplate(typeof(TextBlock));
FrameworkElementFactory Grid = new FrameworkElementFactory(typeof(Grid));
FrameworkElementFactory Txtblck= new FrameworkElementFactory(typeof(TextBlock));
Binding binding = new Binding("AMOUNT");
Txtblck.SetBinding(TextBlock.TextProperty, binding);
binding.StringFormat = String.Format(new CultureInfo("de-DE"), "#,#.00€", Txtblck.Text); //not working
Grid.AppendChild(Txtblck);
dataTemplate.VisualTree = Grid;
Amount_col.CellTemplate = dataTemplate;
Eintraege_view.Columns.Add(Amount_col);
输出如下:
https://i.stack.imgur.com/QuN6c.png(还不允许包含图片)
但我需要这样格式的输出:1.234,67€ 而不是 1,234.67€。
我还检查了我的 CurrentCulture 和 CurrentUICulture,它们都是“de-DE”。
我也试过:
binding.StringFormat = String.Format(new CultureInfo("de-DE"), "{0:N}", Txtblck.Text);
并且我尝试通过 NumberFormatInfo 更改小数点和组分隔符,但这也没有用。
我猜问题是 Binding、ListView 或 Textblock,但我找不到真正的问题。有人可以帮我解决这个问题,让我的分隔符成为 ','。
你的binding.StringFormat
是不是有误?如果你想要 1.234,67€,它应该是 #.#,00€
而不是 #,#.00€
。
binding.StringFormat = String.Format(new CultureInfo("de-DE"), "#.#,00€", Txtblck.Text);
或许您可以创建一个继承自 Binding 的 CultureAwareBinding class:
public class CultureAwareBinding : Binding
{
public CultureAwareBinding(string path)
: base(path)
{
ConverterCulture = CultureInfo.CurrentCulture;
}
}
然后,在您的代码中使用此 class:
var binding = new CultureAwareBinding("AMOUNT");
Txtblck.SetBinding(TextBlock.TextProperty, binding);
我从 中提取了这段代码。
我有一个带有数字的数据表,它是 ListView 的 ItemsSource,我希望它们以“,”作为小数点分隔符和“。”来格式化为货币。作为组分隔符。
我通常知道它是如何在绑定(XAML 和代码隐藏)中与 StringFormat 一起工作的,如这个问题所示:
Changing the default thousand and decimal separator in a binding
但是这次不起作用:我的 ListView 显示“.”尽管如此,作为小数点分隔符。我的示例中的特殊之处在于我需要在运行时生成 GridViewColumns 并以编程方式将 DataTemplates 加载到它们中,例如:
GridViewColumn Amount_col= new GridViewColumn();
Amount_col.Header = "Gesamt";
DataTemplate dataTemplate = new DataTemplate(typeof(TextBlock));
FrameworkElementFactory Grid = new FrameworkElementFactory(typeof(Grid));
FrameworkElementFactory Txtblck= new FrameworkElementFactory(typeof(TextBlock));
Binding binding = new Binding("AMOUNT");
Txtblck.SetBinding(TextBlock.TextProperty, binding);
binding.StringFormat = String.Format(new CultureInfo("de-DE"), "#,#.00€", Txtblck.Text); //not working
Grid.AppendChild(Txtblck);
dataTemplate.VisualTree = Grid;
Amount_col.CellTemplate = dataTemplate;
Eintraege_view.Columns.Add(Amount_col);
输出如下: https://i.stack.imgur.com/QuN6c.png(还不允许包含图片)
但我需要这样格式的输出:1.234,67€ 而不是 1,234.67€。
我还检查了我的 CurrentCulture 和 CurrentUICulture,它们都是“de-DE”。
我也试过:
binding.StringFormat = String.Format(new CultureInfo("de-DE"), "{0:N}", Txtblck.Text);
并且我尝试通过 NumberFormatInfo 更改小数点和组分隔符,但这也没有用。
我猜问题是 Binding、ListView 或 Textblock,但我找不到真正的问题。有人可以帮我解决这个问题,让我的分隔符成为 ','。
你的binding.StringFormat
是不是有误?如果你想要 1.234,67€,它应该是 #.#,00€
而不是 #,#.00€
。
binding.StringFormat = String.Format(new CultureInfo("de-DE"), "#.#,00€", Txtblck.Text);
或许您可以创建一个继承自 Binding 的 CultureAwareBinding class:
public class CultureAwareBinding : Binding
{
public CultureAwareBinding(string path)
: base(path)
{
ConverterCulture = CultureInfo.CurrentCulture;
}
}
然后,在您的代码中使用此 class:
var binding = new CultureAwareBinding("AMOUNT");
Txtblck.SetBinding(TextBlock.TextProperty, binding);
我从